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.
Coleen
>
> 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 serviceability-dev
mailing list