RFR (S) 8178336: Unnecessary SystemDictionary walk for Protection domain liveness

coleen.phillimore at oracle.com coleen.phillimore at oracle.com
Wed Apr 12 22:12:35 UTC 2017


Ioi,  Thank you for reviewing the code.  I've taken this opportunity to 
move the protectionDomainCache classes into files of their own with this 
change.  I also removed an unused function bucket_size() and removed a 
comment before ProtectionDomainCacheEntry about it having to go into the 
dictionary.hpp header file.

I also added debug logging for removing protectiondomain entries, and 
verified entries were deleted, and ran some JDK jtreg protection domain 
tests.

Can you review this new version?  Thanks!

open webrev at http://cr.openjdk.java.net/~coleenp/8178336.03/webrev
bug link https://bugs.openjdk.java.net/browse/JDK-8178336

Thanks,
Coleen

On 4/12/17 10:49 AM, Ioi Lam wrote:
> Looks good. Reviewed.
>
> Thanks
> - Ioi
>
> On 4/11/17 9:03 PM, coleen.phillimore at oracle.com wrote:
>>
>>
>> On 4/11/17 2:35 AM, Ioi Lam wrote:
>>> Hi Coleen,
>>>
>>> Thanks for doing this clean up. I was guiltily of writing the 
>>> original code :-(
>>>
>>> A few questions:
>>>
>>> Why is this block of code moved and the comments dropped?
>>>
>>>  328 void Dictionary::oops_do(OopClosure* f) {
>>>  329   // Only the protection domain oops contain references into 
>>> the heap. Iterate
>>>  330   // over all of them.
>>>  331   _pd_cache_table->oops_do(f);
>>>  332 }
>>>  333
>>>
>>> It would be better to make the changes in-place.
>>
>> I didn't have to change Dictionary::oops_do and moved it to be near 
>> always_strong_oops_do(), so I shouldn't have removed the comment.  I 
>> moved it back but I don't like that it's separated from the other GC 
>> functions.   With my other change, it'll be closer (I think I'm going 
>> to have a merge conflict with myself).
>>>
>>> Also, have you validated that (either with an explicit test, or 
>>> inside the debugger)
>>>
>>> [1] live protection domains in _pd_cache_table are properly 
>>> relocated during GC?
>>> [2] dead protection domains are removed after class unloading?
>>
>> I ran with runThese (which has lots of class loading and unloading) 
>> with logging for both oops_do and unlink functions (removing 
>> protection domain entries)  but I didn't realize that 
>> always_strong_oops_do is never called, so I deleted this function.
>>
>> New webrev (with dictionary::oops_do put back):
>>
>> http://oklahoma.us.oracle.com/~cphillim/webrev/8178336.02/webrev/index.html 
>>
>>
>> Thanks!
>> Coleen
>>>
>>> Thanks
>>> - Ioi
>>>
>>> On 4/11/17 4:18 AM, coleen.phillimore at oracle.com wrote:
>>>> Summary: remove system dictionary walk and pass strong closure for 
>>>> !ClassUnloading
>>>>
>>>> See bug for more details:
>>>>
>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8178336.01/webrev
>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8178336
>>>>
>>>> Tested with nightly tier2-5 tests and jprt (runs all GCs) and 
>>>> runThese with -XX:-ClassUnloading.
>>>>
>>>> Thanks,
>>>> Coleen
>>>
>>
>



More information about the hotspot-dev mailing list