hs25 review request (2nd round): 8008511 JSR 292: MemberName vmtarget refs to methods must be updated at class redefinition

Coleen Phillimore coleen.phillimore at oracle.com
Tue Apr 16 11:35:43 PDT 2013

On 04/12/2013 10:13 PM, serguei.spitsyn at oracle.com wrote:
> Please, review the following fix.
> This is the 2nd version that has a review fixes suggested by Coleen 
> and John in the 1st review round.
> Now the mtClass is used in allocation of MemberNameTable since it's 
> part of class metadata.
> All call sites in the methodHandles.cpp that recursively invoke the 
> add_member_name()
> are made safepoint-safe by replacing oop's with Handle's.
> This allowed to get rid of the No_Safepoint_Verifier in the 
> find_MemberNames.
> The MemberName's are added to MNT not only for methods but also for 
> fields.
> Coleen,
> You also suggested to put all new non-jvmti code under #if 
> INCLUDE_JVMTI condition.
> I've not done it because now the MemberName's associated with the 
> fields are
> also registered in the MNT which is not needed for JVMTI purposes.
> Just have some doubt if it is a right thing to do.
> I'm Ok to add this modification, but could you, confirm that it is 
> still important.

Ok.   I've rereviewed this code.   It looks fine to me.   Thanks for 
taking on this fix.


> Webrev:
> http://cr.openjdk.java.net/~sspitsyn/webrevs/2013/hotspot/8008511-JVMTI-JSR292.2/ 
> Bug:
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8008511
> https://jbs.oracle.com/bugs/browse/JDK-8008511
> The problem is that the old version of the bootstrap method is re-invoked
> after a popframe from the bootstrap method execution.
> It is because the MemberName keeps a stale reference to the old method 
> version.
> The solution (suggested by John) is to lazily create and keep 
> up-to-date a MemberNameTable
> which plays a role of MemberName cache assosiated with the InstanceKlass.
> Then, at class redefinition, this cache is used to replace the old method
> references in the MemberName's with the new method references.
> The MemberNameTable is based on the GrowableArray<jweek>.
> A C_HEAP array is allocated at the first call to 
> InstanceKlass::add_member_name().
> It is released in the InstanceKlass::release_C_heap_structures().
> A global week reference to member name oop is stored in the 
> MemberNameTable.
> It allowed to avoid having the oops_do() in the MemberNameTable.
> Also, the MemberNameTable won't hold member name oops in memory.
> The MemberNameTable_lock mutex is added to serialize MemberNameTable's 
> updates.
> Test coverage: vm.mlvm, nsk.jvmti, nsk.jdi tests on multiple platforms 
> (32 vs 64-bit too).
> The testing looks good.
> Thanks,
> Serguei

More information about the hotspot-dev mailing list