RFR: 8065634: Crash in InstanceKlass::clean_method_data when _method is NULL

Stefan Karlsson stefan.karlsson at oracle.com
Wed Dec 3 14:21:34 UTC 2014


Hi all,

Please, review this patch to fix an issue where the GC encounters an 
InstanceKlass before it has come far enough in the class loading process.

Some background to the fix:

When the JVM loads classes it has to keep track of the allocated 
Metadata, and in the event of an exception deallocate the Metadata. The 
ClassFileParser saves the Metadata pointers so that it knows what needs 
to be deallocated. When the class loading has come far enough there's a 
point were the GC can take over the ownership of the Metadata and do 
deallocation of the both the InstanceKlass and the Metadata, if needed. 
At that point the Metadata pointers in the ClassFileParser are cleared 
and transfered over to the InstanceKlass.

Most Metadata allocations happen before the InstanceKlass is allocated, 
but the Annotations are allocated after the InstanceKlass but before the 
transferal and clearing of the Metadata pointers in the ClassFileParser. 
If the GC stops when allocating the Annotations, it will likely find 
this InstanceKlass and assume that the Metadata are correctly setup. 
This is exactly what's happening in the bug report. The GC finds that 
the _methods array, unexpectedly, points to NULL.

The proposed solution to this problem is to allocate the Annotations 
before the InstanceKlass is allocated.

http://cr.openjdk.java.net/~stefank/8065634/webrev.01
https://bugs.openjdk.java.net/browse/JDK-8065634

Testing:
JPRT, parallel_class_loading testlist, Aurora adhoc run

Thanks,
StefanK


More information about the hotspot-dev mailing list