RFR: 8292375: Convert ProtectionDomainCacheTable to ResourceHashtable [v3]
    David Holmes 
    dholmes at openjdk.org
       
    Mon Aug 29 00:36:12 UTC 2022
    
    
  
On Fri, 26 Aug 2022 17:07:54 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:
>> Please review this simple conversion for the ProtectionDomainCacheTable from Old Hashtable to ResourceHashtable.  There are specific tests for this table in test/hotspot/jtreg/runtime/Dictionary and serviceability/dcmd/vm/DictionaryStatsTest.java.
>> Also tested with tier1-7.
>
> Coleen Phillimore has updated the pull request incrementally with one additional commit since the last revision:
> 
>   include mutexLocker.hpp for minimal build.
Hi Coleen,
Probably due to my lack of understanding of the existing code I found this conversion very hard to follow. A number of comments below.
Thanks.
src/hotspot/share/classfile/protectionDomainCache.cpp line 42:
> 40: #include "utilities/resourceHash.hpp"
> 41: 
> 42: unsigned int ProtectionDomainCacheTable::compute_hash(const WeakHandle& protection_domain) {
Why are we now using `WeakHandle` everywhere?
src/hotspot/share/classfile/protectionDomainCache.cpp line 43:
> 41: 
> 42: unsigned int ProtectionDomainCacheTable::compute_hash(const WeakHandle& protection_domain) {
> 43:   return (unsigned int)(protection_domain.resolve()->identity_hash());
And if it is a `WeakHandle` can't `resolve` now return NULL?
src/hotspot/share/classfile/protectionDomainCache.cpp line 50:
> 48: }
> 49: 
> 50: ResourceHashtable<WeakHandle, WeakHandle, 1009, ResourceObj::C_HEAP, mtClass,
I am struggling to understand what the key and values types are in this hashtable ???
src/hotspot/share/classfile/protectionDomainCache.cpp line 162:
> 160:   // Purge any deleted entries outside of the SystemDictionary_lock.
> 161:   purge_deleted_entries();
> 162:   int oops_removed = purge_entries_from_table();
Maybe add comment
`int oops_removed = purge_entries_from_table(); // reacquires SD lock`
otherwise it gives the false impression this is done lock-free.
src/hotspot/share/classfile/protectionDomainCache.cpp line 168:
> 166: }
> 167: 
> 168: void ProtectionDomainCacheTable::print_on(outputStream* st) {
It is a little disconcerting that `print_on` can no longer be a `const` function!
src/hotspot/share/classfile/protectionDomainCache.cpp line 186:
> 184: 
> 185: // The object_no_keepalive() call peeks at the phantomly reachable oop without
> 186: // keeping it alive. This is okay to do in the VM thread state if it is not
You don't call `object_no_keepalive()` any more
src/hotspot/share/classfile/protectionDomainCache.cpp line 202:
> 200:     // Keep entry alive
> 201:     (void)wk->resolve();
> 202:     return *wk;
Can't this be factored out of the if-else as `wk` is always the right entry to resolve and return?
-------------
PR: https://git.openjdk.org/jdk/pull/10043
    
    
More information about the serviceability-dev
mailing list