-
Enhancement
-
Resolution: Fixed
-
P4
-
9
-
b18
The fix for JDK-8069034 introduced some filtering in the eager reclaim code path when iterating over the remembered sets of humongous objects to avoid marking cards in free regions dirty, which gives some assertions. This showed that the remembered sets may contain references to already freed regions (or otherwise known invalid areas), which are problematic in many ways:
- we cannot uncommit the referenced regions because during remembered scanning we scan them
- we scan areas that are known to not contain any reference, wasting time
The sources of such "invalid" entries are
- the sparse remembered set particularly because it is not scrubbed during scrubbing
- all remembered sets because we only scrub every now and then, but may free regions inbetween (e.g. eager reclaim, mixed gc)
A nicer way would be to eliminate these useless entries alltogether, some ideas in that direction
- improve scrubbing for the sparse remembered set
- filter out entries to currently free regions in the iterator
- remove entries (per-region remembered set) to freed regions as they are freed; one lazy way would be to count the number of times a region has been freed, during creation of the per-region remembered set store that value, and every time we iterate over them compare these values: if they match, iterate, otherwise reclaim (or start some process to reclaim that memory) etc.
- we cannot uncommit the referenced regions because during remembered scanning we scan them
- we scan areas that are known to not contain any reference, wasting time
The sources of such "invalid" entries are
- the sparse remembered set particularly because it is not scrubbed during scrubbing
- all remembered sets because we only scrub every now and then, but may free regions inbetween (e.g. eager reclaim, mixed gc)
A nicer way would be to eliminate these useless entries alltogether, some ideas in that direction
- improve scrubbing for the sparse remembered set
- filter out entries to currently free regions in the iterator
- remove entries (per-region remembered set) to freed regions as they are freed; one lazy way would be to count the number of times a region has been freed, during creation of the per-region remembered set store that value, and every time we iterate over them compare these values: if they match, iterate, otherwise reclaim (or start some process to reclaim that memory) etc.
- blocks
-
JDK-8073465 Protect the memory of G1 regions on the free list
- Open
-
JDK-6490394 G1: Allow heap shrinking / memory unmapping after reclaiming regions during Remark
- Resolved
- is blocked by
-
JDK-8211043 Must not use HeapRegionRemSet::add_reference() during evacuation
- Closed
- relates to
-
JDK-8069034 gc/g1/TestEagerReclaimHumongousRegionsClearMarkBits.java nightly failure
- Resolved