[master] RFR: Implement sliding forwarding scheme that preserves upper header bits [v14]
rkennke at openjdk.java.net
Wed Jul 7 19:47:35 UTC 2021
On Wed, 7 Jul 2021 17:01:48 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
>> Roman Kennke has updated the pull request incrementally with one additional commit since the last revision:
>> Some cosmetic fixes
> src/hotspot/share/gc/g1/g1FullGCOopClosures.inline.hpp line 92:
>> 90: // Forwarded, just update.
>> 91: oop forwardee = _forwarding->forwardee(obj);
>> 92: assert(G1CollectedHeap::heap()->is_in_reserved(forwardee), "should be in object space: " PTR_FORMAT "(" PTR_FORMAT ", " PTR_FORMAT ") " INTPTR_FORMAT, p2i(forwardee), p2i(G1CollectedHeap::heap()->reserved().start()), p2i(G1CollectedHeap::heap()->reserved().end()), obj->mark().value());
> Style: break the line here.
I'd rather remove the new debug output.
> src/hotspot/share/gc/shared/preservedMarks.hpp line 67:
>> 65: // Iterate over the stack, adjust all preserved marks according
>> 66: // to their forwarding location stored in the mark.
>> 67: void adjust_during_full_gc();
> Does this method have any uses? Should those be updated to use `forwarding`? If not, it should be removed for safety?
Actually not, except in a unit test. This test should be written to use a forwarding instead, but this probably requires a mockable/abstract forwarding that can be plugged in for the purpose of the test. I added TODOs and postpone this to later.
> test/hotspot/jtreg/gc/stress/TestMultiThreadStressRSet.java line 52:
>> 50: * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI
>> 51: * -XX:+UseG1GC -XX:G1SummarizeRSetStatsPeriod=100 -Xlog:gc
>> 52: * -Xmx1100M -XX:G1HeapRegionSize=8m -XX:MaxGCPauseMillis=1000 gc.stress.TestMultiThreadStressRSet 60 16
> Why this change?
This is related to disabling the last-last-ditch serial full GC. Apparently, in the old configuration, the serial-full-GC would free enough remaining regions to make this test work. Without the change, it runs into OOM.
More information about the lilliput-dev