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

Yuting Chen chenyt.cs.sjtu at gmail.com
Wed Apr 19 16:56:30 UTC 2017


Thank you, Igor. I can understand now:)

I'd expect that some timeout messages will be provided if the compiler
hangs (a quick patch?). I compiled some pieces of bytecode and waited
for the whole night...

Regards,
Yuting

On Tue, Apr 18, 2017 at 8:15 PM, Igor Veresov <igor.veresov at oracle.com> wrote:
> We know :)
>
> https://bugs.openjdk.java.net/browse/JDK-8146201
>
>
> igor
>
> On Apr 18, 2017, at 7:09 PM, Yuting Chen <chenyt.cs.sjtu at gmail.com> wrote:
>
> Besides,  if a class initializer writes into an external file (or make
> some computations), the compiler will have side effects when compiling
> the corresponding class, :).
>
> On Tue, Apr 18, 2017 at 5:17 PM, Yuting Chen <chenyt.cs.sjtu at gmail.com>
> wrote:
>
> Thank you, Vladimir. Should it be better if the compiler can report a
> timeout error for such a class initializer?
>
> On Tue, Apr 18, 2017 at 4:46 PM, Vladimir Kozlov
> <vladimir.kozlov at oracle.com> wrote:
>
> On 4/18/17 2:20 PM, Yuting Chen 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. Does
> it mean that clinit will run before it is compiled.
>
>
>
> Yes, AOT compiler will run class initializer since it needs to access static
> fields and other values.
>
> Vladimir
>
>
>
> 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