RFR: 8267703: runtime/cds/appcds/cacheObject/HeapFragmentationTest.java crashed with OutOfMemory [v3]
sjohanss at openjdk.java.net
Thu Jun 3 08:47:39 UTC 2021
On Wed, 2 Jun 2021 11:02:54 GMT, Stefan Johansson <sjohanss at openjdk.org> wrote:
>> Please review this change to lower fragmentation when heap usage is low.
>> The above test case fails because the G1 Full GC fails to compact the single used region below the needed threshold. In this case the region needs to be compacted below region index 400 to be able to fit the large array. The reason this fails is that the full GC uses a lot of parallel workers and if the system is under load it is possible that the worker finding the region to compact hasn't been able to claim any regions low enough in the heap to compact the live objects to.
>> To fix this we can add a third thing to consider in the code calculating the number of workers to use for a given compaction. So far we only look at keeping the waste down and using the default adaptive calculations. If we also consider how much is used we can get a lower worker count in cases like this and that will make it much more likely to succeed with the compaction. In this case it will guarantee it since there is a single region used, so there will be only one worker and then it will compact the region to the bottom of the heap.
>> Manual verification that this will cause these collections to only use a single worker. Also currently running some performance regression testing to make sure this doesn't cause any big regressions.
> Stefan Johansson has updated the pull request incrementally with one additional commit since the last revision:
> Thomas review.
> Turn safety MAX2(used, 1) into assert.
@kimbarrett, are you good with the change as it is now?
More information about the hotspot-gc-dev