From c0636734bdf19de6ba41c127aef1f090010c6d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joel=20Sikstr=C3=B6m?= Date: Wed, 3 Dec 2025 14:34:05 +0000 Subject: [PATCH] 8372993: Serial: max_eden_size is too small after JDK-8368740 Reviewed-by: ayang, aboldtch, stefank --- src/hotspot/share/gc/serial/defNewGeneration.cpp | 5 ++++- .../jtreg/gc/arguments/TestNewSizeFlags.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/serial/defNewGeneration.cpp b/src/hotspot/share/gc/serial/defNewGeneration.cpp index 0b2ba44c780..9ccc7b95529 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.cpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.cpp @@ -236,7 +236,10 @@ DefNewGeneration::DefNewGeneration(ReservedSpace rs, // These values are exported as performance counters. uintx size = _virtual_space.reserved_size(); _max_survivor_size = compute_survivor_size(size, SpaceAlignment); - _max_eden_size = size - (2*_max_survivor_size); + + // Eden might grow to be almost as large as the entire young generation. + // We approximate this as the entire virtual space. + _max_eden_size = size; // allocate the performance counters diff --git a/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java b/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java index 2f454940863..f65f211b812 100644 --- a/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java +++ b/test/hotspot/jtreg/gc/arguments/TestNewSizeFlags.java @@ -286,6 +286,20 @@ public class TestNewSizeFlags { if (YOUNG_GC_TYPE == GCTypes.YoungGCType.G1) { return new MemoryUsage(edenUsageInit + survivorUsageInit, 0, edenUsageCommited + survivorUsageCommited, Long.MAX_VALUE); + } else if (YOUNG_GC_TYPE == GCTypes.YoungGCType.DefNew) { + // Eden might grow to be almost the entire young generation, + // so it is approximated as the size for the entire young + // generation. + long youngGenUsageMax = edenUsage.getMax(); + + long combinedSurvivorUsageMax = 2 * survivorUsage.getMax(); + if (combinedSurvivorUsageMax > youngGenUsageMax) { + throw new RuntimeException("Unexpectedly large survivorUsage combined maximum value: " + combinedSurvivorUsageMax); + } + + return new MemoryUsage(edenUsageInit + survivorUsageInit * 2, 0, + edenUsageCommited + survivorUsageCommited * 2, + youngGenUsageMax); } else { return new MemoryUsage(edenUsageInit + survivorUsageInit * 2, 0, edenUsageCommited + survivorUsageCommited * 2,