RFR (xs): 8170959 unloading archived shared class caused crash
Ioi Lam
ioi.lam at oracle.com
Thu Jan 5 01:09:07 UTC 2017
Hi Coleen,
Thanks for the suggestion. I've removed the assert. I needed to add a
check for the _cached_class_file because for shared classes this field
is not allocated from the C heap, but rather points into the shared archive.
http://cr.openjdk.java.net/~iklam/jdk9/8170959-archived-shared-class-unloading.v02/
Thanks
- Ioi
On 1/4/17 3:54 PM, Coleen Phillimore wrote:
>
> Hi Ioi,
>
> It seems like there would be leaks if you don't release some of these
> C_heap structures. Should the assert just be removed?
> Except the constant pool release_C_heap_structures unreferences
> symbols, and that shouldn't be done if the constant pool is shared.
> thanks,
> Coleen
>
> On 1/4/17 6:33 PM, Ioi Lam wrote:
>> Hi,
>>
>> Please review this small fix:
>>
>> https://bugs.openjdk.java.net/browse/JDK-8170959
>> http://cr.openjdk.java.net/~iklam/jdk9/8170959-archived-shared-class-unloading.v01/
>>
>>
>> Please note that this is a closed bug and it's related to unloading
>> shared classes loaded by custom class loaders. The test case is
>> in the closed repo.
>>
>> The bug happened with the following call stack
>>
>> "assert(!this->is_shared()) failed"
>> in InstanceKlass::release_C_heap_structures ()
>> in InstanceKlass::release_C_heap_structures ()
>> in ClassLoaderData::classes_do
>> (f=<InstanceKlass::release_C_heap_structures(InstanceKlass*)>)
>> in ClassLoaderData::~ClassLoaderData ()
>> in ClassLoaderDataGraph::purge ()
>> in G1CollectedHeap::do_full_collection ()
>>
>> The fix is to avoid doing the clean up if the unloaded class is shared.
>> Proper clean up is deferred to JDK 10 (bug JDK-8140287).
>>
>> Thanks
>> - Ioi
>
More information about the hotspot-runtime-dev
mailing list