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

Yuting Chen chenyt.cs.sjtu at gmail.com
Tue Apr 18 01:43:10 UTC 2017


If I moved the infinite loop to any other method (e.g., main), the
class can then be compiled. I guess jaotc runs clinit when it compiles
clinit.

On Mon, Apr 17, 2017 at 6:14 PM, Yuting Chen <chenyt.cs.sjtu at gmail.com> wrote:
> Hi, I recently met a problem: when I tried to compile a class whose
> clinit method contains an infinite loop, the aotc waits and fails to
> response....
>
> It seems that the aotc performs some static analysis before the
> compilation, while the analysis may not stop (when an infinite loop is
> there).
>
> 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 jdk9-dev mailing list