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

John Rose john.r.rose at oracle.com
Wed Apr 17 19:05:56 PDT 2013


As we discussed verbally, I suggest adding a line like this at the beginning of every low-level MemberNameTable access function:

    assert_locked_or_safepoint(MemberNameTable_lock);

(I'm modeling this from SystemDictionary::find_class and its brothers.)

The rest of it looks good.  Reviewed!

— John


On Apr 15, 2013, at 10:59 AM, serguei.spitsyn at oracle.com wrote:

>> 
>> b) do we need to use the MemberNameTable_lock to guard this? 
> 
> I don't think so.
> This deallocation must be done at a safepoint.
> We can't grab locks at safepoints.
> 
> These are the details:
> 
> classLoaderData.cpp:
> 
> // Deallocate free metadata on the free list.  How useful the PermGen was!
> void ClassLoaderData::free_deallocate_list() {
>   // Don't need lock, at safepoint
>   assert(SafepointSynchronize::is_at_safepoint(), "only called at safepoint");
>       . . .
>       } else if (m->is_klass()) {
>         MetadataFactory::free_metadata(this, (InstanceKlass*)m);
>      . . .
> }
> 
> metadataFactory.hpp:
> 
>   // Deallocation method for metadata
>   template <class T>
>   static void free_metadata(ClassLoaderData* loader_data, T md) {
>     if (md != NULL) {
>       . . .
>       md->deallocate_contents(loader_data);
>       loader_data->metaspace_non_null()->deallocate((MetaWord*)md, size, md->is_klass());
>     }
>   }
> 
> instanceKlass.cpp:
> 
> void InstanceKlass::deallocate_contents(ClassLoaderData* loader_data) {
>   . . .
>   release_C_heap_structures();
>   . . .
> }



More information about the hotspot-dev mailing list