mirror of
https://github.com/openjdk/jdk.git
synced 2026-07-12 12:10:01 +00:00
8005452: NPG: Create new flags for Metaspace resizing policy
Reviewed-by: johnc, jwilhelm, coleenp, stefank
This commit is contained in:
parent
251a9ff39c
commit
c727c73cce
@ -1064,11 +1064,11 @@ bool VirtualSpaceList::contains(const void *ptr) {
|
||||
//
|
||||
// After the GC the compute_new_size() for MetaspaceGC is called to
|
||||
// resize the capacity of the metaspaces. The current implementation
|
||||
// is based on the flags MinHeapFreeRatio and MaxHeapFreeRatio used
|
||||
// is based on the flags MinMetaspaceFreeRatio and MaxHeapFreeRatio used
|
||||
// to resize the Java heap by some GC's. New flags can be implemented
|
||||
// if really needed. MinHeapFreeRatio is used to calculate how much
|
||||
// free space is desirable in the metaspace capacity to decide how much
|
||||
// to increase the HWM. MaxHeapFreeRatio is used to decide how much
|
||||
// to increase the HWM. MaxMetaspaceFreeRatio is used to decide how much
|
||||
// free space is desirable in the metaspace capacity before decreasing
|
||||
// the HWM.
|
||||
|
||||
@ -1166,7 +1166,7 @@ void MetaspaceGC::compute_new_size() {
|
||||
size_t capacity_until_GC = vsl->capacity_bytes_sum();
|
||||
size_t free_after_gc = capacity_until_GC - used_after_gc;
|
||||
|
||||
const double minimum_free_percentage = MinHeapFreeRatio / 100.0;
|
||||
const double minimum_free_percentage = MinMetaspaceFreeRatio / 100.0;
|
||||
const double maximum_used_percentage = 1.0 - minimum_free_percentage;
|
||||
|
||||
const double min_tmp = used_after_gc / maximum_used_percentage;
|
||||
@ -1232,8 +1232,8 @@ void MetaspaceGC::compute_new_size() {
|
||||
max_shrink_words));
|
||||
|
||||
// Should shrinking be considered?
|
||||
if (MaxHeapFreeRatio < 100) {
|
||||
const double maximum_free_percentage = MaxHeapFreeRatio / 100.0;
|
||||
if (MaxMetaspaceFreeRatio < 100) {
|
||||
const double maximum_free_percentage = MaxMetaspaceFreeRatio / 100.0;
|
||||
const double minimum_used_percentage = 1.0 - maximum_free_percentage;
|
||||
const double max_tmp = used_after_gc / minimum_used_percentage;
|
||||
size_t maximum_desired_capacity = (size_t)MIN2(max_tmp, double(max_uintx));
|
||||
|
||||
@ -1896,6 +1896,24 @@ bool Arguments::check_vm_args_consistency() {
|
||||
// Keeping the heap 100% free is hard ;-) so limit it to 99%.
|
||||
MinHeapFreeRatio = MIN2(MinHeapFreeRatio, (uintx) 99);
|
||||
|
||||
// Min/MaxMetaspaceFreeRatio
|
||||
status = status && verify_percentage(MinMetaspaceFreeRatio, "MinMetaspaceFreeRatio");
|
||||
status = status && verify_percentage(MaxMetaspaceFreeRatio, "MaxMetaspaceFreeRatio");
|
||||
|
||||
if (MinMetaspaceFreeRatio > MaxMetaspaceFreeRatio) {
|
||||
jio_fprintf(defaultStream::error_stream(),
|
||||
"MinMetaspaceFreeRatio (%s" UINTX_FORMAT ") must be less than or "
|
||||
"equal to MaxMetaspaceFreeRatio (%s" UINTX_FORMAT ")\n",
|
||||
FLAG_IS_DEFAULT(MinMetaspaceFreeRatio) ? "Default: " : "",
|
||||
MinMetaspaceFreeRatio,
|
||||
FLAG_IS_DEFAULT(MaxMetaspaceFreeRatio) ? "Default: " : "",
|
||||
MaxMetaspaceFreeRatio);
|
||||
status = false;
|
||||
}
|
||||
|
||||
// Trying to keep 100% free is not practical
|
||||
MinMetaspaceFreeRatio = MIN2(MinMetaspaceFreeRatio, (uintx) 99);
|
||||
|
||||
if (FullGCALot && FLAG_IS_DEFAULT(MarkSweepAlwaysCompactCount)) {
|
||||
MarkSweepAlwaysCompactCount = 1; // Move objects every gc.
|
||||
}
|
||||
|
||||
@ -3010,10 +3010,16 @@ class CommandLineFlags {
|
||||
"Min change in heap space due to GC (in bytes)") \
|
||||
\
|
||||
product(uintx, MinMetaspaceExpansion, ScaleForWordSize(256*K), \
|
||||
"Min expansion of permanent heap (in bytes)") \
|
||||
"Min expansion of Metaspace (in bytes)") \
|
||||
\
|
||||
product(uintx, MinMetaspaceFreeRatio, 40, \
|
||||
"Min percentage of Metaspace free after GC to avoid expansion") \
|
||||
\
|
||||
product(uintx, MaxMetaspaceFreeRatio, 70, \
|
||||
"Max percentage of Metaspace free after GC to avoid shrinking") \
|
||||
\
|
||||
product(uintx, MaxMetaspaceExpansion, ScaleForWordSize(4*M), \
|
||||
"Max expansion of permanent heap without full GC (in bytes)") \
|
||||
"Max expansion of Metaspace without full GC (in bytes)") \
|
||||
\
|
||||
product(intx, QueuedAllocationWarningCount, 0, \
|
||||
"Number of times an allocation that queues behind a GC " \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user