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: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to