Github user kiszk commented on the issue:
https://github.com/apache/spark/pull/19518
Next, I analyzed usage of constant pool entries and java bytecode ops using
`janinoc`. The summary is as follows:
```
array[4] : 6 + 0 * n entries, 6-8 java bytecode ops / read access
outerInstance: 3 + 3 * n entries, 5 java bytecode ops / read access
innerInsntace: 9 + 3 * n entries, 6 java bytecode ops / read access
```
```
public class CP {
int[] a = new int[1000000];
int globalVar0;
int globalVar1;
private Inner inner = new Inner();
private class Inner {
int nestedVar0;
int nestedVar1;
}
void access() {
a[4] = 0;
a[5] = 0;
globalVar0 = 0;
globalVar1 = 0;
inner.nestedVar0 = 0;
inner.nestedVar1 = 0;
}
static public void main(String[] argv) {
CP cp = new CP();
cp.access();
}
}
```
Java bytecode
```
void access();
descriptor: ()V
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: getfield #12 // Field a:[I
4: iconst_4
5: iconst_0
6: iastore
7: aload_0
8: getfield #12 // Field a:[I
11: iconst_5
12: iconst_0
13: iastore
14: aload_0
15: iconst_0
16: putfield #16 // Field globalVar0:I
19: aload_0
20: iconst_0
21: putfield #19 // Field globalVar1:I
24: aload_0
25: getfield #23 // Field inner:LCP$Inner;
28: iconst_0
29: putfield #28 // Field CP$Inner.nestedVar0:I
32: aload_0
33: getfield #23 // Field inner:LCP$Inner;
36: iconst_0
37: putfield #31 // Field CP$Inner.nestedVar1:I
40: return
```
Constant pool
```
#1 = Utf8 CP
#2 = Class #1 // CP
#9 = Utf8 a
#10 = Utf8 [I
#11 = NameAndType #9:#10 // a:[I
#12 = Fieldref #2.#11 // CP.a:[I
#13 = Utf8 globalVar0
#14 = Utf8 I
#15 = NameAndType #13:#14 // globalVar0:I
#16 = Fieldref #2.#15 // CP.globalVar0:I
#17 = Utf8 globalVar1
#18 = NameAndType #17:#14 // globalVar1:I
#19 = Fieldref #2.#18 // CP.globalVar1:I
#20 = Utf8 inner
#21 = Utf8 LCP$Inner;
#22 = NameAndType #20:#21 // inner:LCP$Inner;
#23 = Fieldref #2.#22 // CP.inner:LCP$Inner;
#24 = Utf8 CP$Inner
#25 = Class #24 // CP$Inner
#26 = Utf8 nestedVar0
#27 = NameAndType #26:#14 // nestedVar0:I
#28 = Fieldref #25.#27 // CP$Inner.nestedVar0:I
#29 = Utf8 nestedVar1
#30 = NameAndType #29:#14 // nestedVar1:I
#31 = Fieldref #25.#30 // CP$Inner.nestedVar1:I
#32 = Utf8 LineNumberTable
#33 = Utf8 Code
#34 = Utf8 main
#35 = Utf8 ([Ljava/lang/String;)V
#36 = Utf8 <init>
#37 = NameAndType #36:#8 // "<init>":()V
#38 = Methodref #2.#37 // CP."<init>":()V
#39 = NameAndType #7:#8 // access:()V
#40 = Methodref #2.#39 // CP.access:()V
#41 = Methodref #4.#37 // java/lang/Object."<init>":()V
#42 = Integer 1000000
#43 = Utf8 (LCP;)V
#44 = NameAndType #36:#43 // "<init>":(LCP;)V
#45 = Methodref #25.#44 // CP$Inner."<init>":(LCP;)V
#46 = Utf8 Inner
#47 = Utf8 InnerClasses
```
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]