< prev index next > test/hotspot/jtreg/gc/shenandoah/oom/TestThreadFailure.java
Print this page
/*
* Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+ * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
}
public static void main(String[] args) throws Exception {
if (args.length > 0) {
for (int t = 0; t < COUNT; t++) {
+ // If we experience OutOfMemoryError during our attempt to instantiate NastyThread, we'll abort
+ // main and will not print "All good". We'll also report a non-zero termination code. In the
+ // case that the previously instantiated NastyThread accumulated more than SheanndoahNoProgressThreshold
+ // unproductive GC cycles before failing, the main thread may not try a Full GC before it experiences
+ // OutOfMemoryError exception.
Thread thread = new NastyThread();
thread.start();
thread.join();
+ // Having joined thread, we know the memory consumed by thread is now garbage, and will eventually be
+ // collected. Some or all of that memory may have been promoted, so we may need to perform a Full GC
+ // in order to reclaim it quickly.
}
System.out.println("All good");
return;
}
analyzer.shouldHaveExitValue(0);
analyzer.shouldContain("java.lang.OutOfMemoryError");
analyzer.shouldContain("All good");
}
+
+ {
+ ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(
+ "-Xmx32m",
+ "-XX:+UnlockExperimentalVMOptions",
+ "-XX:+UseShenandoahGC", "-XX:ShenandoahGCMode=generational",
+ TestThreadFailure.class.getName(),
+ "test");
+
+ OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
+ analyzer.shouldHaveExitValue(0);
+ analyzer.shouldContain("java.lang.OutOfMemoryError");
+ analyzer.shouldContain("All good");
+ }
}
}
< prev index next >