aot compiler halts when there exists an infinite loop in clinit()

Yuting Chen chenyt.cs.sjtu at gmail.com
Tue Apr 18 21:20:12 UTC 2017


Hi, are there any comments to this case? I found that the clinit
method will be compiled if it does not contain the infinite loop. Does
it mean that clinit will run before it is compiled.

Re-paste the bytecode:

public class Vector1
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
   #1 = Utf8               Vector1
   #2 = Class              #1             // Vector1
   #3 = Utf8               java/lang/Object
   #4 = Class              #3             // java/lang/Object
   #5 = Utf8               serialVersionUID
   #6 = Utf8               J
   #7 = Long               -2767605614048989439l
   #9 = Utf8               <clinit>
  #10 = Utf8               ()V
  #11 = NameAndType        #5:#6          // serialVersionUID:J
  #12 = Fieldref           #2.#11         // Vector1.serialVersionUID:J
  #13 = Utf8               main
  #14 = Utf8               ([Ljava/lang/String;)V
  #15 = Utf8               ConstantValue
  #16 = Utf8               Code
  #17 = Utf8               StackMapTable
{
  public static {};
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: ldc2_w        #7                  // long -2767605614048989439l
         3: putstatic     #12                 // Field serialVersionUID:J
         6: iconst_1
         7: iconst_m1
         8: iadd
         9: ifge          0
        12: return
      StackMapTable: number_of_entries = 1
        frame_type = 0 /* same */

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=0, locals=1, args_size=1
         0: return
}

On Tue, Apr 18, 2017 at 9:41 AM, Yuting Chen <chenyt.cs.sjtu at gmail.com> wrote:
> Hi, are there any comments to this case? I found that the clinit
> method will be compiled if it does not contain the infinite loop. It's
> weird.
>
> The bytecode is shown as follows:
>
>  public class Vector1
>    minor version: 0
>    major version: 52
>    flags: ACC_PUBLIC, ACC_SUPER
>  Constant pool:
>     #1 = Utf8               Vector1
>     #2 = Class              #1             // Vector1
>     #3 = Utf8               java/lang/Object
>     #4 = Class              #3             // java/lang/Object
>     #5 = Utf8               serialVersionUID
>     #6 = Utf8               J
>     #7 = Long               -2767605614048989439l
>     #9 = Utf8               <clinit>
>    #10 = Utf8               ()V
>    #11 = NameAndType        #5:#6          // serialVersionUID:J
>    #12 = Fieldref           #2.#11         // Vector1.serialVersionUID:J
>    #13 = Utf8               main
>    #14 = Utf8               ([Ljava/lang/String;)V
>    #15 = Utf8               ConstantValue
>    #16 = Utf8               Code
>    #17 = Utf8               StackMapTable
>  {
>    public static {};
>      descriptor: ()V
>      flags: ACC_PUBLIC, ACC_STATIC
>      Code:
>        stack=2, locals=0, args_size=0
>           0: ldc2_w        #7                  // long -2767605614048989439l
>           3: putstatic     #12                 // Field serialVersionUID:J
>           6: iconst_1
>           7: iconst_m1
>           8: iadd
>           9: ifge          0
>          12: return
>        StackMapTable: number_of_entries = 1
>          frame_type = 0 /* same */
>
>    public static void main(java.lang.String[]);
>      descriptor: ([Ljava/lang/String;)V
>      flags: ACC_PUBLIC, ACC_STATIC
>      Code:
>        stack=0, locals=1, args_size=1
>           0: return
>  }


More information about the hotspot-compiler-dev mailing list