RFR: 8318720: G1: Memory leak in G1CodeRootSet after JDK-8315503
    Thomas Schatzl 
    tschatzl at openjdk.org
       
    Wed Oct 25 12:17:35 UTC 2023
    
    
  
On Wed, 25 Oct 2023 08:12:17 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:
>> Calling `ConcurrentHashTable:table.unsafe_reset()` in `G1CodeRootSet::clear()` does not free the entries that still in the table. This patch empties the table before the `unsafe_reset()` call to avoid memory leak.
>> 
>> Test:
>>  tier1 and tier2 (fastdebug and release) on Linux x86_64
>
> src/hotspot/share/gc/g1/g1CodeRootSet.cpp line 164:
> 
>> 162:       Atomic::store(&_num_entries, (size_t)0);
>> 163:     }
>> 164:     _table.unsafe_reset();
> 
> Thanks for catching this!
> 
>  I believe something like a call to `_table.clean([] (nmethod** value) { return true; });` should do roughly the same. (It is fine to name the lambda with something meaningful, like `always_true`. Or `delete_all`. `do_value` is just too unspecific to me).
Another option is to provide a reset function in the CHT itself that roughly does what the destructor does right now.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16352#discussion_r1371652342
    
    
More information about the hotspot-gc-dev
mailing list