RFR: JDK-8114823 - G1 doesn't honor request to disable class unloading
Derek White
derek.white at oracle.com
Tue Jun 21 18:03:07 UTC 2016
Hi Jesper,
This looks good!
- Derek
On 6/2/16 9:23 AM, Jesper Wilhelmsson wrote:
> Hi,
>
> I finally got back to looking at this.
>
> The last change had an issue as noted by Derek below, and by StefanK
> offline, we didn't handle nmethod scanning in the same way in the
> different collectors. Both approaches are most likely OK, but we
> should use the same approach in all GCs.
>
> The way we did it in G1, to treat all nmethods as strong roots, is the
> way we chose to implement right now. This is a safer/smaller step than
> to perform nmethod unloading even though class unloading is disabled.
> In the future we may want to perform nmethod unloading as is done in
> the other approach, but this should be done in a separate change.
>
> A new webrev is available here:
>
> http://cr.openjdk.java.net/~jwilhelm/8114823/webrev.03/
>
> I have run this through JPRT and GCBasher with all collectors and
> ClassUnloading set to false. It seems to hold together.
>
> Thanks,
> /Jesper
>
>
> Den 2/5/16 kl. 17:46, skrev Derek White:
>> Hi Jesper,
>>
>> On 5/2/16 11:22 AM, Jesper Wilhelmsson wrote:
>>> Hi,
>>>
>>> A new version of the patch is now available:
>>>
>>> http://cr.openjdk.java.net/~jwilhelm/8114823/webrev.02/
>>>
>>> Based on comments from Mikael, Derek, and Stefan K I have made the
>>> following
>>> changes:
>>>
>>> * CMSClassUnloadingEnabled is removed for real and made an alias of
>>> ClassUnloadingWithConcurrentMark. This removes the questionable code
>>> when
>>> initializing the flags.
>>>
>>> * A new call to unload nmethods if class unloading is disabled in
>>> psMarkSweep,
>>> psParallelCompact, and genMarkSweep. It turned out that in some
>>> cases the call
>>> to unload nmethods is needed even if we do not perform class unloading.
>> My only question is why don't we need to do that for G1 also? We used
>> to, but
>> change at g1MarkSweep.cpp:Line 165 means we don't anymore?
>>
>> The rest looks good to me.
>>
>> - Derek
>>>
>>> Thanks,
>>> /Jesper
>>>
>>>
>>> Den 31/3/16 kl. 15:51, skrev Jesper Wilhelmsson:
>>>> Hi,
>>>>
>>>> Please review this change to make the GCs disable class unloading
>>>> if disabled on
>>>> the command line.
>>>>
>>>> There are a few parts in this change:
>>>>
>>>> 1. The flag ClassUnloadingWithConcurrentMark was not set to false if
>>>> ClassUnloading was disabled on the command line. This is now done.
>>>>
>>>> 2. CMS was using CMSClassUnloadingEnabled instead of the more generic
>>>> ClassUnloadingWithConcurrentMark. I changed so that
>>>> ClassUnloadingWithConcurrentMark is used all over and
>>>> CMSClassUnloadingEnabled
>>>> is only used as an alias when initializing the arguments. At some
>>>> point it would
>>>> be nice to deprecate CMSClassUnloadingEnabled but it is a fairly
>>>> well known flag
>>>> so that's not part of this change.
>>>>
>>>> 3. CMS, Serial, and PS did correctly disable class unloading when
>>>> told so, but
>>>> the outermost code witch included some logging was still enabled
>>>> making class
>>>> unloading output present in the log file. I changed so that this
>>>> code is also
>>>> disabled.
>>>>
>>>> 4. G1 did not disable class unloading during full GCs at all. This
>>>> is now done.
>>>>
>>>> Testing: I used SecureDBBTest.java as suggested in the bug while
>>>> fixing to
>>>> verify that class unloading was happening before the fix and not
>>>> after. I also
>>>> ran it through JPRT.
>>>>
>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8114823
>>>> Webrev: http://cr.openjdk.java.net/~jwilhelm/8114823/webrev.00/
>>>>
>>>> Thanks,
>>>> /Jesper
>>
More information about the hotspot-gc-dev
mailing list