RFR JDK-8232222: Set state to 'linked' when an archived class is restored at runtime
Ioi Lam
ioi.lam at oracle.com
Wed Jun 3 04:55:43 UTC 2020
On 5/27/20 11:13 PM, David Holmes wrote:
> Hi Jiangli,
>
> On 28/05/2020 11:35 am, Ioi Lam wrote:
>>
>>
>>>>
>>> I was going to take the suggestion, but realized that it would add
>>> unnecessary complications for archived boot classes with class
>>> pre-initialization support. Some agents may set
>>> JvmtiExport::should_post_class_prepare(). It's worthwhile to support
>>> class pre-init uniformly for archived boot classes with
>>> JvmtiExport::should_post_class_prepare() enabled or disabled.
>>
>> This would introduce behavioral changes when JVMTI is enabled:
>>
>> + The order of JvmtiExport::post_class_prepare is different than before
>> + JvmtiExport::post_class_prepare may be called for a class that was
>> not called before (if the class is never linked during run time)
>> + JvmtiExport::post_class_prepare was called inside the init_lock,
>> now it's called outside of the init_lock
>
> I have to say I share Ioi's concerns here. This change will impact JVM
> TI agents in a way we can't be sure of. From a specification
> perspective I think we are fine as linking can be lazy or eager, so
> there's no implied order either. But this would be a behavioural
> change that will be observable by agents. (I'm less concerned about
> the init_lock situation as it seems potentially buggy to me to call
> out to an agent with the init_lock held in the first place! I find it
> hard to imagine an agent only working correctly if the init_lock is
> held.)
David,
The init_lock has a serializing effect. The callback for a subclass will
not be executed until the callback for its super class has been finished.
With the proposed patch, the callback for both the super class and
subclass can proceed in parallel. So if an agent performs class
hierarchy analysis, for example, it may need to perform extra
synchronization.
This is just one example that I can think of. I am sure there are other
issues that we have not thought about.
The fact is we are dealing with arbitrary code in the callbacks, and we
are changing the conditions of how they are called. The calls happen
inside very delicate code (class loading, system dictionary). I am
reluctant to do the due diligence, which is substantial, of verifying
that this is a safe change, unless we have a really compelling reason to
do so.
Thanks
- Ioi
More information about the hotspot-runtime-dev
mailing list