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