mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-07 17:08:53 +00:00
Merge
This commit is contained in:
commit
2d7e2d242f
@ -108,9 +108,9 @@ public:
|
||||
// do nothing. tlabs must be inited by initialize() calls
|
||||
}
|
||||
|
||||
static const size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); }
|
||||
static const size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; }
|
||||
static const size_t max_size_in_bytes() { return max_size() * BytesPerWord; }
|
||||
static size_t min_size() { return align_object_size(MinTLABSize / HeapWordSize) + alignment_reserve(); }
|
||||
static size_t max_size() { assert(_max_size != 0, "max_size not set up"); return _max_size; }
|
||||
static size_t max_size_in_bytes() { return max_size() * BytesPerWord; }
|
||||
static void set_max_size(size_t max_size) { _max_size = max_size; }
|
||||
|
||||
HeapWord* start() const { return _start; }
|
||||
|
||||
@ -38,6 +38,61 @@ import java.util.function.Consumer;
|
||||
* referenced objects after GCs
|
||||
*/
|
||||
public enum GC {
|
||||
CMC {
|
||||
@Override
|
||||
public Runnable get() {
|
||||
return () -> {
|
||||
Helpers.waitTillCMCFinished(WHITE_BOX, 0);
|
||||
WHITE_BOX.g1StartConcMarkCycle();
|
||||
Helpers.waitTillCMCFinished(WHITE_BOX, 0);
|
||||
};
|
||||
}
|
||||
|
||||
public Consumer<ReferenceInfo<Object[]>> getChecker() {
|
||||
return getCheckerImpl(false, false, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> shouldContain() {
|
||||
return Arrays.asList(GCTokens.WB_INITIATED_CMC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> shouldNotContain() {
|
||||
return Arrays.asList(GCTokens.WB_INITIATED_YOUNG_GC, GCTokens.WB_INITIATED_MIXED_GC,
|
||||
GCTokens.FULL_GC, GCTokens.YOUNG_GC);
|
||||
}
|
||||
},
|
||||
|
||||
CMC_NO_SURV_ROOTS {
|
||||
@Override
|
||||
public Runnable get() {
|
||||
return () -> {
|
||||
WHITE_BOX.youngGC();
|
||||
Helpers.waitTillCMCFinished(WHITE_BOX, 0);
|
||||
WHITE_BOX.youngGC();
|
||||
Helpers.waitTillCMCFinished(WHITE_BOX, 0);
|
||||
|
||||
WHITE_BOX.g1StartConcMarkCycle();
|
||||
Helpers.waitTillCMCFinished(WHITE_BOX, 0);
|
||||
};
|
||||
}
|
||||
|
||||
public Consumer<ReferenceInfo<Object[]>> getChecker() {
|
||||
return getCheckerImpl(true, false, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> shouldContain() {
|
||||
return Arrays.asList(GCTokens.WB_INITIATED_CMC);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> shouldNotContain() {
|
||||
return Arrays.asList(GCTokens.WB_INITIATED_MIXED_GC,
|
||||
GCTokens.FULL_GC, GCTokens.YOUNG_GC);
|
||||
}
|
||||
},
|
||||
|
||||
YOUNG_GC {
|
||||
@Override
|
||||
@ -60,6 +115,7 @@ public enum GC {
|
||||
GCTokens.CMC, GCTokens.YOUNG_GC);
|
||||
}
|
||||
},
|
||||
|
||||
FULL_GC {
|
||||
@Override
|
||||
public Runnable get() {
|
||||
|
||||
@ -31,6 +31,13 @@ The test checks that after different type of GC unreachable objects behave as ex
|
||||
|
||||
3. Full GC with memory pressure - weakly and softly referenced non-humongous and humongous objects are collected.
|
||||
|
||||
4. CMC - weakly referenced non-humongous objects are collected, other objects are not collected since weak references
|
||||
from Young Gen is handled as strong during CMC.
|
||||
|
||||
5. CMC_NO_SURV_ROOTS - weakly referenced non-humongous and humongous objects are collected, softly referenced
|
||||
non-humongous and humongous objects are not collected since we make 2 Young GC to promote all
|
||||
weak references to Old Gen.
|
||||
|
||||
The test gets gc type as a command line argument.
|
||||
Then the test allocates object graph in heap (currently testing scenarios are pre-generated and stored in
|
||||
TestcaseData.getPregeneratedTestcases()) with TestObjectGraphAfterGC::allocateObjectGraph.
|
||||
|
||||
@ -77,6 +77,14 @@ import java.util.stream.Collectors;
|
||||
* -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_FULL_GC_MEMORY_PRESSURE.gc.log
|
||||
* gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC FULL_GC_MEMORY_PRESSURE
|
||||
*
|
||||
* @run main/othervm -Xms200M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:.
|
||||
* -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_CMC.gc.log -XX:MaxTenuringThreshold=16
|
||||
* gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC CMC
|
||||
*
|
||||
* @run main/othervm -Xms200M -XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:.
|
||||
* -XX:G1HeapRegionSize=1M -Xlog:gc=info:file=TestObjectGraphAfterGC_CMC_NO_SURV_ROOTS.gc.log -XX:MaxTenuringThreshold=1
|
||||
* gc.g1.humongousObjects.objectGraphTest.TestObjectGraphAfterGC CMC_NO_SURV_ROOTS
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@ -21,10 +21,12 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
// Aix commits on touch, so this test won't work.
|
||||
/*
|
||||
* @test
|
||||
* @key regression
|
||||
* @bug 8012015
|
||||
* @requires !(os.family == "aix")
|
||||
* @summary Make sure reserved (but uncommitted) memory is not accessible
|
||||
* @library /testlibrary /test/lib
|
||||
* @modules java.base/jdk.internal.misc
|
||||
@ -36,18 +38,11 @@
|
||||
*/
|
||||
|
||||
import jdk.test.lib.*;
|
||||
import jdk.test.lib.Platform;
|
||||
|
||||
import sun.hotspot.WhiteBox;
|
||||
|
||||
public class ReserveMemory {
|
||||
private static boolean isWindows() {
|
||||
return System.getProperty("os.name").toLowerCase().startsWith("win");
|
||||
}
|
||||
|
||||
private static boolean isOsx() {
|
||||
return System.getProperty("os.name").toLowerCase().startsWith("mac");
|
||||
}
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
if (args.length > 0) {
|
||||
WhiteBox.getWhiteBox().readReservedMemory();
|
||||
@ -66,9 +61,9 @@ public class ReserveMemory {
|
||||
"test");
|
||||
|
||||
OutputAnalyzer output = new OutputAnalyzer(pb.start());
|
||||
if (isWindows()) {
|
||||
if (Platform.isWindows()) {
|
||||
output.shouldContain("EXCEPTION_ACCESS_VIOLATION");
|
||||
} else if (isOsx()) {
|
||||
} else if (Platform.isOSX()) {
|
||||
output.shouldContain("SIGBUS");
|
||||
} else {
|
||||
output.shouldContain("SIGSEGV");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user