aot compiler halts when there exists an infinite loop in clinit()
Igor Veresov
igor.veresov at oracle.com
Wed Apr 19 03:15:55 UTC 2017
We know :)
https://bugs.openjdk.java.net/browse/JDK-8146201 <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
>>>>> }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20170418/d17db13e/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list