8169517: WhiteBox should provide concurrent GC phase control
Added WhiteBox API and G1 implementation. Reviewed-by: shade, dfazunen
This commit is contained in:
parent
47d5482383
commit
6ac2631be4
@ -390,6 +390,39 @@ public class WhiteBox {
|
||||
// Force Full GC
|
||||
public native void fullGC();
|
||||
|
||||
// Returns true if the current GC supports control of its concurrent
|
||||
// phase via requestConcurrentGCPhase(). If false, a request will
|
||||
// always fail.
|
||||
public native boolean supportsConcurrentGCPhaseControl();
|
||||
|
||||
// Returns an array of concurrent phase names provided by this
|
||||
// collector. These are the names recognized by
|
||||
// requestConcurrentGCPhase().
|
||||
public native String[] getConcurrentGCPhases();
|
||||
|
||||
// Attempt to put the collector into the indicated concurrent phase,
|
||||
// and attempt to remain in that state until a new request is made.
|
||||
//
|
||||
// Returns immediately if already in the requested phase.
|
||||
// Otherwise, waits until the phase is reached.
|
||||
//
|
||||
// Throws IllegalStateException if unsupported by the current collector.
|
||||
// Throws NullPointerException if phase is null.
|
||||
// Throws IllegalArgumentException if phase is not valid for the current collector.
|
||||
public void requestConcurrentGCPhase(String phase) {
|
||||
if (!supportsConcurrentGCPhaseControl()) {
|
||||
throw new IllegalStateException("Concurrent GC phase control not supported");
|
||||
} else if (phase == null) {
|
||||
throw new NullPointerException("null phase");
|
||||
} else if (!requestConcurrentGCPhase0(phase)) {
|
||||
throw new IllegalArgumentException("Unknown concurrent GC phase: " + phase);
|
||||
}
|
||||
}
|
||||
|
||||
// Helper for requestConcurrentGCPhase(). Returns true if request
|
||||
// succeeded, false if the phase is invalid.
|
||||
private native boolean requestConcurrentGCPhase0(String phase);
|
||||
|
||||
// Method tries to start concurrent mark cycle.
|
||||
// It returns false if CM Thread is always in concurrent cycle.
|
||||
public native boolean g1StartConcMarkCycle();
|
||||
|
Loading…
x
Reference in New Issue
Block a user