RFR 8028497: SIGSEGV at ClassLoaderData::oops_do(OopClosure*, KlassClosure*, bool)

Coleen Phillimore coleen.phillimore at oracle.com
Wed Mar 26 21:15:55 UTC 2014

Hi Jon,
Thank you for looking at the code changes.

On 3/26/14 12:24 PM, Jon Masamitsu wrote:
> Coleen,
> Did you remove Class_obj_allocate() because it was only
> called in that one spot and  use obj_allocate() did most
> of the work?

I deleted it because GC doesn't need to know how these javaClasses are 
set up and I spent way to long looking for this code and didn't find it 
where it belongs, so I removed this.  This Class_obj_allocate is an 
artifact of the permgen code.

> http://cr.openjdk.java.net/~coleenp/8028497/src/share/vm/oops/instanceMirrorKlass.cpp.frames.html 
>  373   // the size in the mirror size itself.
> Drop the second "size".  You know how we GC guys are
> getting with our comments :-).

Yes, I noticed that.  Thanks - fixed.
> http://cr.openjdk.java.net/~coleenp/8028497/src/share/vm/oops/klass.cpp.frames.html 
>  498 void Klass::restore_unshareable_info(TRAPS) {
>  499   // If an exception happened during CDS restore, some of these 
> fields may already be
>  500   // set.  We leave the class on the CLD list, even if incomplete 
> so that we don't
>  501   // modify the CLD list outside a safepoint.
>  502   if (class_loader_data() == NULL) {
>  503     ClassLoaderData* loader_data = 
> ClassLoaderData::the_null_class_loader_data();
> I can see that this works with the current CDS (sharing only classes 
> loader
> with the NULL class loader).  Will it work if the shared classes are 
> loaded
> with an application class loader?

I hope Ioi can answer that.  I assume so because the classes don't 
change class loaders if restoring shareable info fails.

Ioi pointed out to me (not on open list) that I missed making 
link_method() and creating the constant pool resolved references array 
restartable, so I'm testing a fix for that also and I'll post an update 
later.   But you've seen most of it.

> Rest looks good.
> Jon
> On 3/25/2014 1:42 PM, Coleen Phillimore wrote:
>> Summary: Keep class in CLD::_klasses list and mirror created for CDS 
>> classes if OOM during restore_shareable_info(). This keeps pointers 
>> consistent for CMS.
>> This change makes restoring the mirror for shared classes restartable 
>> if there is an OOM in the middle of restore_unshareable_info.   The 
>> mirror field in the classes and CLD link is not cleaned up anymore.  
>> The class isn't marked loaded though so must be loaded again.
>> Tested with Stefan's test case with hard coded OOM in jvm, so can't 
>> add the test.   Also ran all the tests against -client and server 
>> with -Xshare:auto and with -XX:+UseConcMarkSweepGC.
>> open webrev at http://cr.openjdk.java.net/~coleenp/8028497/
>> bug link https://bugs.openjdk.java.net/browse/JDK-8028497
>> Thanks,
>> Coleen

More information about the hotspot-dev mailing list