Skip to content

Commit 4087a3a

Browse files
committed
cvm/overlay: (2/2) Fix G1ClassUnloadingHWM test
Update TestG1ClassUnloadingHWM.java and WhiteBox.java to follow the JDK17 hotspot GC logging model. Add maxMetaspaceAllocationSize() to WhiteBox.java and use it in TestG1ClassUnloadingHWM.java to align with JDK17 hotspot behavior.
1 parent f630b60 commit 4087a3a

5 files changed

Lines changed: 15 additions & 11 deletions

File tree

cvm.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,6 +447,7 @@ endif
447447
$(call overlay_single,jdk8u,hotspot/test/gc/arguments/TestInitialTenuringThreshold.java, $(JDK8_SRCROOT))
448448
$(call overlay_single,jdk8u,hotspot/test/gc/arguments/TestUnrecognizedVMOptionsHandling.java, $(JDK8_SRCROOT))
449449
$(call overlay_single,jdk8u,hotspot/test/gc/arguments/TestUseCompressedOopsErgoTools.java, $(JDK8_SRCROOT))
450+
$(call overlay_single,jdk8u,hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java, $(JDK8_SRCROOT))
450451
$(call overlay_single,jdk8u,hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java, $(JDK8_SRCROOT))
451452
$(call overlay_single,jdk8u,hotspot/test/gc/startup_warnings/TestDefaultMaxRAMFraction.java, $(JDK8_SRCROOT))
452453

cvm/conf/jtreg_hotspot8_excludes_aarch64.list

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ compiler/tiered/LevelTransitionTest.java
2525
gc/6941923/Test6941923.java
2626
gc/arguments/TestSurvivorAlignmentInBytesOption.java
2727
gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java
28-
gc/class_unloading/TestG1ClassUnloadingHWM.java
2928
gc/ergonomics/TestDynamicNumberOfGCThreads.java
3029
gc/g1/TestEagerReclaimHumongousRegionsClearMarkBits.java
3130
gc/g1/TestG1TraceEagerReclaimHumongousObjects.java

cvm/conf/jtreg_hotspot8_excludes_x64.list

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ compiler/tiered/LevelTransitionTest.java
1919
gc/6941923/Test6941923.java
2020
gc/arguments/TestSurvivorAlignmentInBytesOption.java
2121
gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java
22-
gc/class_unloading/TestG1ClassUnloadingHWM.java
2322
gc/ergonomics/TestDynamicNumberOfGCThreads.java
2423
gc/g1/TestEagerReclaimHumongousRegionsClearMarkBits.java
2524
gc/g1/TestG1TraceEagerReclaimHumongousObjects.java

cvm/overlay/jdk8u/hotspot/test/gc/class_unloading/TestG1ClassUnloadingHWM.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ private static OutputAnalyzer run(boolean enableUnloading) throws Exception {
5151
"-Xmn" + YoungGenSize,
5252
"-XX:+UseG1GC",
5353
"-XX:" + (enableUnloading ? "+" : "-") + "ClassUnloadingWithConcurrentMark",
54-
"-XX:+PrintHeapAtGC",
55-
"-XX:+PrintGCDetails",
54+
"-Xlog:gc",
5655
TestG1ClassUnloadingHWM.AllocateBeyondMetaspaceSize.class.getName(),
5756
"" + MetaspaceSize,
5857
"" + YoungGenSize);
@@ -71,16 +70,16 @@ public static void testWithoutG1ClassUnloading() throws Exception {
7170
// -XX:-ClassUnloadingWithConcurrentMark is used, so we expect a full GC instead of a concurrent cycle.
7271
OutputAnalyzer out = runWithoutG1ClassUnloading();
7372

74-
out.shouldMatch(".*Full GC.*");
75-
out.shouldNotMatch(".*initial-mark.*");
73+
out.shouldMatch(".*Pause Full.*");
74+
out.shouldNotMatch(".*Pause Young \\(Concurrent Start\\).*");
7675
}
7776

7877
public static void testWithG1ClassUnloading() throws Exception {
7978
// -XX:+ClassUnloadingWithConcurrentMark is used, so we expect a concurrent cycle instead of a full GC.
8079
OutputAnalyzer out = runWithG1ClassUnloading();
8180

82-
out.shouldMatch(".*initial-mark.*");
83-
out.shouldNotMatch(".*Full GC.*");
81+
out.shouldMatch(".*Pause Young \\(Concurrent Start\\).*");
82+
out.shouldNotMatch(".*Pause Full.*");
8483
}
8584

8685
public static void main(String args[]) throws Exception {
@@ -101,12 +100,17 @@ public static void main(String [] args) throws Exception {
101100
// Allocate past the MetaspaceSize limit
102101
long metaspaceSize = Long.parseLong(args[0]);
103102
long allocationBeyondMetaspaceSize = metaspaceSize * 2;
104-
long metaspace = wb.allocateMetaspace(null, allocationBeyondMetaspaceSize);
103+
104+
// There is a cap on how large a single metaspace allocation can get. So we may have to allocate in blocks.
105+
final long max = wb.maxMetaspaceAllocationSize();
106+
while (allocationBeyondMetaspaceSize > 0) {
107+
long s = max < allocationBeyondMetaspaceSize ? max : allocationBeyondMetaspaceSize;
108+
wb.allocateMetaspace(null, s);
109+
allocationBeyondMetaspaceSize -= s;
110+
}
105111

106112
long youngGenSize = Long.parseLong(args[1]);
107113
triggerYoungGCs(youngGenSize);
108-
109-
wb.freeMetaspace(null, metaspace, metaspace);
110114
}
111115

112116
public static void triggerYoungGCs(long youngGenSize) {

cvm/overlay/jdk8u/hotspot/test/testlibrary/whitebox/sun/hotspot/WhiteBox.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ public boolean enqueueMethodForCompilation(Executable method, int compLevel, int
184184
public native void freeCodeBlob(long address);
185185
public native Object[] getCodeBlob(long address);
186186
public native long allocateMetaspace(ClassLoader classLoader, long size);
187+
public native long maxMetaspaceAllocationSize();
187188
public native void freeMetaspace(ClassLoader classLoader, long addr, long size);
188189
public native long incMetaspaceCapacityUntilGC(long increment);
189190
public native long metaspaceCapacityUntilGC();

0 commit comments

Comments
 (0)