System.out.println lead to assert(resolved_method->method_holder()->is_linked()) failed: must be linked

David Holmes david.holmes at oracle.com
Thu Dec 13 03:26:37 UTC 2018


On 13/12/2018 12:58 pm, Leslie Zhai wrote:
> Hi Coleen,
> 
> System.out.println was added on purpose:

You can't do that. You can't put any code in the Object constructor (or 
various other places - static initializers etc) because nothing else is 
initialized yet - including String, System etc etc. The code will hit 
exceptions and try to throw but can't because the Exception classes 
can't be initialized yet.

The assert is what we always see when trying to throw an exception 
before the VM is initialized enough to throw exceptions.

Cheers,
David
----

> diff -r 8449dc3cbebe src/java.base/share/classes/java/lang/Object.java
> --- a/src/java.base/share/classes/java/lang/Object.java    Mon Nov 12 
> 15:34:21 2018 +0800
> +++ b/src/java.base/share/classes/java/lang/Object.java    Thu Dec 13 
> 10:40:33 2018 +0800
> @@ -47,7 +47,9 @@
>        * Constructs a new object.
>        */
>       @HotSpotIntrinsicCandidate
> -    public Object() {}
> +    public Object() {
> +      System.out.println("DEBUG: on purpose");
> +    }
> 
>       /**
>        * Returns the runtime class of this {@code Object}. The returned
> 
> ----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
> 
> Then it lead to the assertion error, similar as:
> 
> https://bugs.openjdk.java.net/browse/JDK-8069005
> 
> $ ./build/linux-x86_64-normal-server-fastdebug/jdk/bin/java -version
> # To suppress the following error report, specify this argument
> # after -XX: or in .hotspotrc: SuppressErrorAt=/linkResolver.cpp:1380
> #
> # A fatal error has been detected by the Java Runtime Environment:
> #
> #  Internal Error 
> (/home/zhaixiang/jdk/src/hotspot/share/interpreter/linkResolver.cpp:1380), 
> pid=11090, tid=11091
> #  assert(resolved_method->method_holder()->is_linked()) failed: must be 
> linked
> 
> ----- 8< -------- 8< -------- 8< -------- 8< -------- 8< -------- 8< ---
> 
> But just add java.lang.Object initialization in bootstrapping the jvm 
> couldn't fix the issue:
> 
> diff -r 2c5bf37c8f8e src/hotspot/share/runtime/thread.cpp
> --- a/src/hotspot/share/runtime/thread.cpp    Thu Dec 06 20:39:03 2018 
> +0800
> +++ b/src/hotspot/share/runtime/thread.cpp    Thu Dec 13 10:44:56 2018 
> +0800
> @@ -3524,6 +3524,7 @@
>     // Initialize java_lang.System (needed before creating the thread)
>     initialize_class(vmSymbols::java_lang_System(), CHECK);
>     // The VM creates & returns objects of this class. Make sure it's 
> initialized.
> +  initialize_class(vmSymbols::java_lang_Object(), CHECK);
>     initialize_class(vmSymbols::java_lang_Class(), CHECK);
>     initialize_class(vmSymbols::java_lang_ThreadGroup(), CHECK);
>     Handle thread_group = create_initial_thread_group(CHECK);
> 
> Please give me some advice how to fix the issue, thanks a lot!
> 
> Regards,
> 
> Leslie Zhai
> 
> 


More information about the hotspot-dev mailing list