8072774: bigapps/Weblogic+medrec/nowarnings fails due to CodeHeap 'profiled nmethods' exhaustion

Store profiled code in the non-profiled code heap (and vice versa) if the code cache is really full.

Reviewed-by: kvn, iveresov
This commit is contained in:
Tobias Hartmann 2015-02-23 08:48:19 +01:00
parent 7208abd71e
commit ccaded21d2

View File

@ -32,15 +32,28 @@ import sun.hotspot.WhiteBox;
public enum BlobType { public enum BlobType {
// Execution level 1 and 4 (non-profiled) nmethods (including native nmethods) // Execution level 1 and 4 (non-profiled) nmethods (including native nmethods)
MethodNonProfiled(0, "CodeHeap 'non-profiled nmethods'", "NonProfiledCodeHeapSize"), MethodNonProfiled(0, "CodeHeap 'non-profiled nmethods'", "NonProfiledCodeHeapSize") {
@Override
public boolean allowTypeWhenOverflow(BlobType type) {
return super.allowTypeWhenOverflow(type)
|| type == BlobType.MethodProfiled;
}
},
// Execution level 2 and 3 (profiled) nmethods // Execution level 2 and 3 (profiled) nmethods
MethodProfiled(1, "CodeHeap 'profiled nmethods'", "ProfiledCodeHeapSize"), MethodProfiled(1, "CodeHeap 'profiled nmethods'", "ProfiledCodeHeapSize") {
@Override
public boolean allowTypeWhenOverflow(BlobType type) {
return super.allowTypeWhenOverflow(type)
|| type == BlobType.MethodNonProfiled;
}
},
// Non-nmethods like Buffers, Adapters and Runtime Stubs // Non-nmethods like Buffers, Adapters and Runtime Stubs
NonNMethod(2, "CodeHeap 'non-nmethods'", "NonNMethodCodeHeapSize") { NonNMethod(2, "CodeHeap 'non-nmethods'", "NonNMethodCodeHeapSize") {
@Override @Override
public boolean allowTypeWhenOverflow(BlobType type) { public boolean allowTypeWhenOverflow(BlobType type) {
return super.allowTypeWhenOverflow(type) return super.allowTypeWhenOverflow(type)
|| type == BlobType.MethodNonProfiled; || type == BlobType.MethodNonProfiled
|| type == BlobType.MethodProfiled;
} }
}, },
// All types (No code cache segmentation) // All types (No code cache segmentation)