RFR: 8320525: G1: G1UpdateRemSetTrackingBeforeRebuild::distribute_marked_bytes accesses partially unloaded klass

Albert Mingkun Yang ayang at openjdk.org
Thu Nov 23 14:22:08 UTC 2023


On Tue, 21 Nov 2023 16:01:39 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:

> Hi all,
> 
>   please review this fix that removes the access to a partially unloaded (i.e. unlinked only) `Klass` used for debug code in `G1UpdateRemSetTrackingBeforeRebuild::distribute_marked_bytes`.
> 
> This starts to fail if metadata purging happens before the call to this methods (as https://bugs.openjdk.org/browse/JDK-8317809 suggests). The test gc/g1/humongousObjects/TestHumongousClassLoader.java starts to crash on linux-x86 with 100% reproduction because it more aggressively uncommits memory when purging metaspace.
> 
> The fix fixes the asserts to only access the klass when it should not be unloaded yet.
> 
> Testing: failing test case not failing any more, gha
> 
> Thanks,
>   Thomas

src/hotspot/share/gc/g1/g1ConcurrentMark.cpp line 1137:

> 1135:       // regions; also, we should not access their header any more them as their
> 1136:       // klass may have been unloaded.
> 1137:       assert(marked_bytes == 0 || cast_to_oop(hr->bottom())->size() * HeapWordSize == marked_bytes,

Is it possible to separate these two cases into two methods, for instance? Taking a step back, why do we even need to call `note_end_of_marking` on these effectively empty regions?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/16766#discussion_r1403448011


More information about the hotspot-gc-dev mailing list