Skip to content

Commit 7620124

Browse files
committed
8257230: assert(InitialHeapSize >= MinHeapSize) failed: Ergonomics decided on incompatible initial and minimum heap sizes
Reviewed-by: tschatzl, sjohanss
1 parent 05dac03 commit 7620124

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

src/hotspot/share/runtime/arguments.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1802,12 +1802,11 @@ void Arguments::set_heap_size() {
18021802

18031803
if (InitialHeapSize == 0) {
18041804
julong reasonable_initial = (julong)((phys_mem * InitialRAMPercentage) / 100);
1805+
reasonable_initial = limit_by_allocatable_memory(reasonable_initial);
18051806

18061807
reasonable_initial = MAX3(reasonable_initial, reasonable_minimum, (julong)MinHeapSize);
18071808
reasonable_initial = MIN2(reasonable_initial, (julong)MaxHeapSize);
18081809

1809-
reasonable_initial = limit_by_allocatable_memory(reasonable_initial);
1810-
18111810
FLAG_SET_ERGO(InitialHeapSize, (size_t)reasonable_initial);
18121811
log_trace(gc, heap)(" Initial heap size " SIZE_FORMAT, InitialHeapSize);
18131812
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
24+
package gc.ergonomics;
25+
26+
/*
27+
* @test TestMinHeapSize
28+
* @bug 8257230
29+
* @summary Check ergonomics decided on compatible initial and minimum heap sizes
30+
* @library /test/lib
31+
* @requires os.family == "linux"
32+
* @run main/othervm gc.ergonomics.TestMinHeapSize
33+
*/
34+
35+
import jdk.test.lib.Platform;
36+
import jdk.test.lib.process.ProcessTools;
37+
38+
39+
public class TestMinHeapSize {
40+
41+
public static void main(String[] args) throws Throwable {
42+
String cmd = ProcessTools.getCommandLine(ProcessTools.createJavaProcessBuilder(
43+
"-XX:MinHeapSize=1537m", "-XX:CompressedClassSpaceSize=64m", "-version"));
44+
45+
int ulimitV = 3145728; // 3G
46+
var pb = new ProcessBuilder(
47+
"sh", "-c",
48+
"ulimit -v " + ulimitV + "; " + cmd);
49+
50+
// lower MALLOC_ARENA_MAX b/c we limited virtual memory, see JDK-8043516
51+
pb.environment().put("MALLOC_ARENA_MAX", "4");
52+
53+
var oa = ProcessTools.executeCommand(pb);
54+
55+
oa.shouldNotContain("hs_err")
56+
.shouldNotContain("Internal Error")
57+
.shouldHaveExitValue(0);
58+
}
59+
}

0 commit comments

Comments
 (0)