< prev index next >

src/share/vm/gc/parallel/psAdaptiveSizePolicy.cpp

Print this page

        

*** 28,37 **** --- 28,38 ---- #include "gc/parallel/psGCAdaptivePolicyCounters.hpp" #include "gc/parallel/psScavenge.hpp" #include "gc/shared/collectorPolicy.hpp" #include "gc/shared/gcCause.hpp" #include "gc/shared/gcPolicyCounters.hpp" + #include "logging/log.hpp" #include "runtime/timer.hpp" #include "utilities/top.hpp" #include <math.h>
*** 157,174 **** _major_pause_old_estimator->update(promo_size_in_mbytes, major_pause_in_ms); _major_pause_young_estimator->update(eden_size_in_mbytes, major_pause_in_ms); ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print("psAdaptiveSizePolicy::major_collection_end: " ! "major gc cost: %f average: %f", collection_cost, ! avg_major_gc_cost()->average()); ! gclog_or_tty->print_cr(" major pause: %f major period %f", ! major_pause_in_ms, ! _latest_major_mutator_interval_seconds * MILLIUNITS); ! } // Calculate variable used to estimate collection cost vs. gen sizes assert(collection_cost >= 0.0, "Expected to be non-negative"); _major_collection_estimator->update(promo_size_in_mbytes, collection_cost); --- 158,171 ---- _major_pause_old_estimator->update(promo_size_in_mbytes, major_pause_in_ms); _major_pause_young_estimator->update(eden_size_in_mbytes, major_pause_in_ms); ! log_trace(gc, ergo)("psAdaptiveSizePolicy::major_collection_end: major gc cost: %f average: %f", ! collection_cost,avg_major_gc_cost()->average()); ! log_trace(gc, ergo)(" major pause: %f major period %f", ! major_pause_in_ms, _latest_major_mutator_interval_seconds * MILLIUNITS); // Calculate variable used to estimate collection cost vs. gen sizes assert(collection_cost >= 0.0, "Expected to be non-negative"); _major_collection_estimator->update(promo_size_in_mbytes, collection_cost);
*** 195,217 **** bool PSAdaptiveSizePolicy::should_full_GC(size_t old_free_in_bytes) { // A similar test is done in the scavenge's should_attempt_scavenge(). If // this is changed, decide if that test should also be changed. bool result = padded_average_promoted_in_bytes() > (float) old_free_in_bytes; ! if (PrintGCDetails && Verbose) { ! if (result) { ! gclog_or_tty->print(" full after scavenge: "); ! } else { ! gclog_or_tty->print(" no full after scavenge: "); ! } ! gclog_or_tty->print_cr(" average_promoted " SIZE_FORMAT ! " padded_average_promoted " SIZE_FORMAT ! " free in old gen " SIZE_FORMAT, (size_t) average_promoted_in_bytes(), (size_t) padded_average_promoted_in_bytes(), old_free_in_bytes); - } return result; } void PSAdaptiveSizePolicy::clear_generation_free_space_flags() { --- 192,206 ---- bool PSAdaptiveSizePolicy::should_full_GC(size_t old_free_in_bytes) { // A similar test is done in the scavenge's should_attempt_scavenge(). If // this is changed, decide if that test should also be changed. bool result = padded_average_promoted_in_bytes() > (float) old_free_in_bytes; ! log_trace(gc, ergo)("%s after scavenge average_promoted " SIZE_FORMAT " padded_average_promoted " SIZE_FORMAT " free in old gen " SIZE_FORMAT, ! result ? "Full" : "No full", (size_t) average_promoted_in_bytes(), (size_t) padded_average_promoted_in_bytes(), old_free_in_bytes); return result; } void PSAdaptiveSizePolicy::clear_generation_free_space_flags() {
*** 359,371 **** } } // Note we make the same tests as in the code block below; the code // seems a little easier to read with the printing in another block. - if (PrintAdaptiveSizePolicy) { if (desired_eden_size > eden_limit) { ! gclog_or_tty->print_cr( "PSAdaptiveSizePolicy::compute_eden_space_size limits:" " desired_eden_size: " SIZE_FORMAT " old_eden_size: " SIZE_FORMAT " eden_limit: " SIZE_FORMAT " cur_eden: " SIZE_FORMAT --- 348,359 ---- } } // Note we make the same tests as in the code block below; the code // seems a little easier to read with the printing in another block. if (desired_eden_size > eden_limit) { ! log_debug(gc, ergo)( "PSAdaptiveSizePolicy::compute_eden_space_size limits:" " desired_eden_size: " SIZE_FORMAT " old_eden_size: " SIZE_FORMAT " eden_limit: " SIZE_FORMAT " cur_eden: " SIZE_FORMAT
*** 373,389 **** " avg_young_live: " SIZE_FORMAT, desired_eden_size, _eden_size, eden_limit, cur_eden, max_eden_size, (size_t)avg_young_live()->average()); } if (gc_cost() > gc_cost_limit) { ! gclog_or_tty->print_cr( "PSAdaptiveSizePolicy::compute_eden_space_size: gc time limit" " gc_cost: %f " " GCTimeLimit: " UINTX_FORMAT, gc_cost(), GCTimeLimit); } - } // Align everything and make a final limit check desired_eden_size = align_size_up(desired_eden_size, _space_alignment); desired_eden_size = MAX2(desired_eden_size, _space_alignment); --- 361,376 ---- " avg_young_live: " SIZE_FORMAT, desired_eden_size, _eden_size, eden_limit, cur_eden, max_eden_size, (size_t)avg_young_live()->average()); } if (gc_cost() > gc_cost_limit) { ! log_debug(gc, ergo)( "PSAdaptiveSizePolicy::compute_eden_space_size: gc time limit" " gc_cost: %f " " GCTimeLimit: " UINTX_FORMAT, gc_cost(), GCTimeLimit); } // Align everything and make a final limit check desired_eden_size = align_size_up(desired_eden_size, _space_alignment); desired_eden_size = MAX2(desired_eden_size, _space_alignment);
*** 397,451 **** // eden size. Let the tenuring calculation push more // into the old gen. desired_eden_size = MAX2(eden_limit, cur_eden); } ! if (PrintAdaptiveSizePolicy) { ! // Timing stats ! gclog_or_tty->print( ! "PSAdaptiveSizePolicy::compute_eden_space_size: costs" ! " minor_time: %f" ! " major_cost: %f" ! " mutator_cost: %f" ! " throughput_goal: %f", ! minor_gc_cost(), major_gc_cost(), mutator_cost(), ! _throughput_goal); ! ! // We give more details if Verbose is set ! if (Verbose) { ! gclog_or_tty->print( " minor_pause: %f" ! " major_pause: %f" ! " minor_interval: %f" ! " major_interval: %f" ! " pause_goal: %f", _avg_minor_pause->padded_average(), _avg_major_pause->padded_average(), _avg_minor_interval->average(), _avg_major_interval->average(), gc_pause_goal_sec()); - } ! // Footprint stats ! gclog_or_tty->print( " live_space: " SIZE_FORMAT ! " free_space: " SIZE_FORMAT, live_space(), free_space()); ! // More detail ! if (Verbose) { ! gclog_or_tty->print( " base_footprint: " SIZE_FORMAT ! " avg_young_live: " SIZE_FORMAT ! " avg_old_live: " SIZE_FORMAT, (size_t)_avg_base_footprint->average(), (size_t)avg_young_live()->average(), (size_t)avg_old_live()->average()); - } ! // And finally, our old and new sizes. ! gclog_or_tty->print(" old_eden_size: " SIZE_FORMAT ! " desired_eden_size: " SIZE_FORMAT, _eden_size, desired_eden_size); - gclog_or_tty->cr(); - } set_eden_size(desired_eden_size); } void PSAdaptiveSizePolicy::compute_old_gen_free_space( --- 384,413 ---- // eden size. Let the tenuring calculation push more // into the old gen. desired_eden_size = MAX2(eden_limit, cur_eden); } ! log_debug(gc, ergo)("PSAdaptiveSizePolicy::compute_eden_space_size: costs minor_time: %f major_cost: %f mutator_cost: %f throughput_goal: %f", ! minor_gc_cost(), major_gc_cost(), mutator_cost(), _throughput_goal); ! ! log_trace(gc, ergo)("Minor_pause: %f major_pause: %f minor_interval: %f major_interval: %fpause_goal: %f", _avg_minor_pause->padded_average(), _avg_major_pause->padded_average(), _avg_minor_interval->average(), _avg_major_interval->average(), gc_pause_goal_sec()); ! log_debug(gc, ergo)("Live_space: " SIZE_FORMAT " free_space: " SIZE_FORMAT, live_space(), free_space()); ! ! log_trace(gc, ergo)("Base_footprint: " SIZE_FORMAT " avg_young_live: " SIZE_FORMAT " avg_old_live: " SIZE_FORMAT, (size_t)_avg_base_footprint->average(), (size_t)avg_young_live()->average(), (size_t)avg_old_live()->average()); ! log_debug(gc, ergo)("Old eden_size: " SIZE_FORMAT " desired_eden_size: " SIZE_FORMAT, _eden_size, desired_eden_size); set_eden_size(desired_eden_size); } void PSAdaptiveSizePolicy::compute_old_gen_free_space(
*** 562,648 **** } } // Note we make the same tests as in the code block below; the code // seems a little easier to read with the printing in another block. - if (PrintAdaptiveSizePolicy) { if (desired_promo_size > promo_limit) { // "free_in_old_gen" was the original value for used for promo_limit size_t free_in_old_gen = (size_t)(max_old_gen_size - avg_old_live()->average()); ! gclog_or_tty->print_cr( "PSAdaptiveSizePolicy::compute_old_gen_free_space limits:" " desired_promo_size: " SIZE_FORMAT " promo_limit: " SIZE_FORMAT " free_in_old_gen: " SIZE_FORMAT " max_old_gen_size: " SIZE_FORMAT " avg_old_live: " SIZE_FORMAT, desired_promo_size, promo_limit, free_in_old_gen, max_old_gen_size, (size_t) avg_old_live()->average()); } if (gc_cost() > gc_cost_limit) { ! gclog_or_tty->print_cr( "PSAdaptiveSizePolicy::compute_old_gen_free_space: gc time limit" " gc_cost: %f " " GCTimeLimit: " UINTX_FORMAT, gc_cost(), GCTimeLimit); } - } // Align everything and make a final limit check desired_promo_size = align_size_up(desired_promo_size, _space_alignment); desired_promo_size = MAX2(desired_promo_size, _space_alignment); promo_limit = align_size_down(promo_limit, _space_alignment); // And one last limit check, now that we've aligned things. desired_promo_size = MIN2(desired_promo_size, promo_limit); - if (PrintAdaptiveSizePolicy) { // Timing stats ! gclog_or_tty->print( ! "PSAdaptiveSizePolicy::compute_old_gen_free_space: costs" ! " minor_time: %f" ! " major_cost: %f" ! " mutator_cost: %f" ! " throughput_goal: %f", ! minor_gc_cost(), major_gc_cost(), mutator_cost(), ! _throughput_goal); ! ! // We give more details if Verbose is set ! if (Verbose) { ! gclog_or_tty->print( " minor_pause: %f" ! " major_pause: %f" ! " minor_interval: %f" ! " major_interval: %f" ! " pause_goal: %f", _avg_minor_pause->padded_average(), _avg_major_pause->padded_average(), _avg_minor_interval->average(), _avg_major_interval->average(), gc_pause_goal_sec()); - } // Footprint stats ! gclog_or_tty->print( " live_space: " SIZE_FORMAT ! " free_space: " SIZE_FORMAT, live_space(), free_space()); ! // More detail ! if (Verbose) { ! gclog_or_tty->print( " base_footprint: " SIZE_FORMAT ! " avg_young_live: " SIZE_FORMAT ! " avg_old_live: " SIZE_FORMAT, (size_t)_avg_base_footprint->average(), (size_t)avg_young_live()->average(), (size_t)avg_old_live()->average()); - } ! // And finally, our old and new sizes. ! gclog_or_tty->print(" old_promo_size: " SIZE_FORMAT ! " desired_promo_size: " SIZE_FORMAT, _promo_size, desired_promo_size); - gclog_or_tty->cr(); - } set_promo_size(desired_promo_size); } void PSAdaptiveSizePolicy::decay_supplemental_growth(bool is_full_gc) { --- 524,585 ---- } } // Note we make the same tests as in the code block below; the code // seems a little easier to read with the printing in another block. if (desired_promo_size > promo_limit) { // "free_in_old_gen" was the original value for used for promo_limit size_t free_in_old_gen = (size_t)(max_old_gen_size - avg_old_live()->average()); ! log_debug(gc, ergo)( "PSAdaptiveSizePolicy::compute_old_gen_free_space limits:" " desired_promo_size: " SIZE_FORMAT " promo_limit: " SIZE_FORMAT " free_in_old_gen: " SIZE_FORMAT " max_old_gen_size: " SIZE_FORMAT " avg_old_live: " SIZE_FORMAT, desired_promo_size, promo_limit, free_in_old_gen, max_old_gen_size, (size_t) avg_old_live()->average()); } if (gc_cost() > gc_cost_limit) { ! log_debug(gc, ergo)( "PSAdaptiveSizePolicy::compute_old_gen_free_space: gc time limit" " gc_cost: %f " " GCTimeLimit: " UINTX_FORMAT, gc_cost(), GCTimeLimit); } // Align everything and make a final limit check desired_promo_size = align_size_up(desired_promo_size, _space_alignment); desired_promo_size = MAX2(desired_promo_size, _space_alignment); promo_limit = align_size_down(promo_limit, _space_alignment); // And one last limit check, now that we've aligned things. desired_promo_size = MIN2(desired_promo_size, promo_limit); // Timing stats ! log_debug(gc, ergo)("PSAdaptiveSizePolicy::compute_old_gen_free_space: costs minor_time: %f major_cost: %f mutator_cost: %f throughput_goal: %f", ! minor_gc_cost(), major_gc_cost(), mutator_cost(), _throughput_goal); ! ! log_trace(gc, ergo)("Minor_pause: %f major_pause: %f minor_interval: %f major_interval: %f pause_goal: %f", _avg_minor_pause->padded_average(), _avg_major_pause->padded_average(), _avg_minor_interval->average(), _avg_major_interval->average(), gc_pause_goal_sec()); // Footprint stats ! log_debug(gc, ergo)("Live_space: " SIZE_FORMAT " free_space: " SIZE_FORMAT, live_space(), free_space()); ! ! log_trace(gc, ergo)("Base_footprint: " SIZE_FORMAT " avg_young_live: " SIZE_FORMAT " avg_old_live: " SIZE_FORMAT, (size_t)_avg_base_footprint->average(), (size_t)avg_young_live()->average(), (size_t)avg_old_live()->average()); ! log_debug(gc, ergo)("Old promo_size: " SIZE_FORMAT " desired_promo_size: " SIZE_FORMAT, _promo_size, desired_promo_size); set_promo_size(desired_promo_size); } void PSAdaptiveSizePolicy::decay_supplemental_growth(bool is_full_gc) {
*** 717,734 **** // promo_increment_aligned_up(*desired_promo_size_ptr); set_change_old_gen_for_maj_pauses(increase_old_gen_for_maj_pauses_true); } } ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( "PSAdaptiveSizePolicy::adjust_promo_for_pause_time " "adjusting gen sizes for major pause (avg %f goal %f). " "desired_promo_size " SIZE_FORMAT " promo delta " SIZE_FORMAT, _avg_major_pause->average(), gc_pause_goal_sec(), *desired_promo_size_ptr, promo_heap_delta); - } } void PSAdaptiveSizePolicy::adjust_eden_for_pause_time(bool is_full_gc, size_t* desired_promo_size_ptr, size_t* desired_eden_size_ptr) { --- 654,669 ---- // promo_increment_aligned_up(*desired_promo_size_ptr); set_change_old_gen_for_maj_pauses(increase_old_gen_for_maj_pauses_true); } } ! log_trace(gc, ergo)( "PSAdaptiveSizePolicy::adjust_promo_for_pause_time " "adjusting gen sizes for major pause (avg %f goal %f). " "desired_promo_size " SIZE_FORMAT " promo delta " SIZE_FORMAT, _avg_major_pause->average(), gc_pause_goal_sec(), *desired_promo_size_ptr, promo_heap_delta); } void PSAdaptiveSizePolicy::adjust_eden_for_pause_time(bool is_full_gc, size_t* desired_promo_size_ptr, size_t* desired_eden_size_ptr) {
*** 738,755 **** // a change less than the required alignment is probably not worth // attempting. if (_avg_minor_pause->padded_average() > _avg_major_pause->padded_average()) { adjust_eden_for_minor_pause_time(is_full_gc, desired_eden_size_ptr); } ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( "PSAdaptiveSizePolicy::adjust_eden_for_pause_time " "adjusting gen sizes for major pause (avg %f goal %f). " "desired_eden_size " SIZE_FORMAT " eden delta " SIZE_FORMAT, _avg_major_pause->average(), gc_pause_goal_sec(), *desired_eden_size_ptr, eden_heap_delta); - } } void PSAdaptiveSizePolicy::adjust_promo_for_throughput(bool is_full_gc, size_t* desired_promo_size_ptr) { --- 673,688 ---- // a change less than the required alignment is probably not worth // attempting. if (_avg_minor_pause->padded_average() > _avg_major_pause->padded_average()) { adjust_eden_for_minor_pause_time(is_full_gc, desired_eden_size_ptr); } ! log_trace(gc, ergo)( "PSAdaptiveSizePolicy::adjust_eden_for_pause_time " "adjusting gen sizes for major pause (avg %f goal %f). " "desired_eden_size " SIZE_FORMAT " eden delta " SIZE_FORMAT, _avg_major_pause->average(), gc_pause_goal_sec(), *desired_eden_size_ptr, eden_heap_delta); } void PSAdaptiveSizePolicy::adjust_promo_for_throughput(bool is_full_gc, size_t* desired_promo_size_ptr) {
*** 759,775 **** if ((gc_cost() + mutator_cost()) == 0.0) { return; } ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print("\nPSAdaptiveSizePolicy::adjust_promo_for_throughput(" ! "is_full: %d, promo: " SIZE_FORMAT "): ", ! is_full_gc, *desired_promo_size_ptr); ! gclog_or_tty->print_cr("mutator_cost %f major_gc_cost %f " ! "minor_gc_cost %f", mutator_cost(), major_gc_cost(), minor_gc_cost()); ! } // Tenured generation if (is_full_gc) { // Calculate the change to use for the tenured gen. size_t scaled_promo_heap_delta = 0; --- 692,707 ---- if ((gc_cost() + mutator_cost()) == 0.0) { return; } ! log_trace(gc, ergo)("PSAdaptiveSizePolicy::adjust_promo_for_throughput(is_full: %d, promo: " SIZE_FORMAT "): mutator_cost %f major_gc_cost %f minor_gc_cost %f", ! is_full_gc, ! *desired_promo_size_ptr, ! mutator_cost(), ! major_gc_cost(), ! minor_gc_cost()); // Tenured generation if (is_full_gc) { // Calculate the change to use for the tenured gen. size_t scaled_promo_heap_delta = 0;
*** 778,793 **** size_t promo_heap_delta = promo_increment_with_supplement_aligned_up(*desired_promo_size_ptr); double scale_by_ratio = major_gc_cost() / gc_cost(); scaled_promo_heap_delta = (size_t) (scale_by_ratio * (double) promo_heap_delta); ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( ! "Scaled tenured increment: " SIZE_FORMAT " by %f down to " ! SIZE_FORMAT, promo_heap_delta, scale_by_ratio, scaled_promo_heap_delta); - } } else if (major_gc_cost() >= 0.0) { // Scaling is not going to work. If the major gc time is the // larger, give it a full increment. if (major_gc_cost() >= minor_gc_cost()) { scaled_promo_heap_delta = --- 710,721 ---- size_t promo_heap_delta = promo_increment_with_supplement_aligned_up(*desired_promo_size_ptr); double scale_by_ratio = major_gc_cost() / gc_cost(); scaled_promo_heap_delta = (size_t) (scale_by_ratio * (double) promo_heap_delta); ! log_trace(gc, ergo)("Scaled tenured increment: " SIZE_FORMAT " by %f down to " SIZE_FORMAT, promo_heap_delta, scale_by_ratio, scaled_promo_heap_delta); } else if (major_gc_cost() >= 0.0) { // Scaling is not going to work. If the major gc time is the // larger, give it a full increment. if (major_gc_cost() >= minor_gc_cost()) { scaled_promo_heap_delta =
*** 837,854 **** set_change_old_gen_for_throughput( increase_old_gen_for_throughput_true); _old_gen_change_for_major_throughput++; } ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( ! "adjusting tenured gen for throughput (avg %f goal %f). " ! "desired_promo_size " SIZE_FORMAT " promo_delta " SIZE_FORMAT , ! mutator_cost(), _throughput_goal, *desired_promo_size_ptr, scaled_promo_heap_delta); } - } } void PSAdaptiveSizePolicy::adjust_eden_for_throughput(bool is_full_gc, size_t* desired_eden_size_ptr) { --- 765,779 ---- set_change_old_gen_for_throughput( increase_old_gen_for_throughput_true); _old_gen_change_for_major_throughput++; } ! log_trace(gc, ergo)("Adjusting tenured gen for throughput (avg %f goal %f). desired_promo_size " SIZE_FORMAT " promo_delta " SIZE_FORMAT , ! mutator_cost(), ! _throughput_goal, *desired_promo_size_ptr, scaled_promo_heap_delta); } } void PSAdaptiveSizePolicy::adjust_eden_for_throughput(bool is_full_gc, size_t* desired_eden_size_ptr) {
*** 858,874 **** if ((gc_cost() + mutator_cost()) == 0.0) { return; } ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print("\nPSAdaptiveSizePolicy::adjust_eden_for_throughput(" ! "is_full: %d, cur_eden: " SIZE_FORMAT "): ", ! is_full_gc, *desired_eden_size_ptr); ! gclog_or_tty->print_cr("mutator_cost %f major_gc_cost %f " ! "minor_gc_cost %f", mutator_cost(), major_gc_cost(), minor_gc_cost()); ! } // Young generation size_t scaled_eden_heap_delta = 0; // Can the increment to the generation be scaled? if (gc_cost() >= 0.0 && minor_gc_cost() >= 0.0) { --- 783,798 ---- if ((gc_cost() + mutator_cost()) == 0.0) { return; } ! log_trace(gc, ergo)("PSAdaptiveSizePolicy::adjust_eden_for_throughput(is_full: %d, cur_eden: " SIZE_FORMAT "): mutator_cost %f major_gc_cost %f minor_gc_cost %f", ! is_full_gc, ! *desired_eden_size_ptr, ! mutator_cost(), ! major_gc_cost(), ! minor_gc_cost()); // Young generation size_t scaled_eden_heap_delta = 0; // Can the increment to the generation be scaled? if (gc_cost() >= 0.0 && minor_gc_cost() >= 0.0) {
*** 876,891 **** eden_increment_with_supplement_aligned_up(*desired_eden_size_ptr); double scale_by_ratio = minor_gc_cost() / gc_cost(); assert(scale_by_ratio <= 1.0 && scale_by_ratio >= 0.0, "Scaling is wrong"); scaled_eden_heap_delta = (size_t) (scale_by_ratio * (double) eden_heap_delta); ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( ! "Scaled eden increment: " SIZE_FORMAT " by %f down to " ! SIZE_FORMAT, eden_heap_delta, scale_by_ratio, scaled_eden_heap_delta); - } } else if (minor_gc_cost() >= 0.0) { // Scaling is not going to work. If the minor gc time is the // larger, give it a full increment. if (minor_gc_cost() > major_gc_cost()) { scaled_eden_heap_delta = --- 800,811 ---- eden_increment_with_supplement_aligned_up(*desired_eden_size_ptr); double scale_by_ratio = minor_gc_cost() / gc_cost(); assert(scale_by_ratio <= 1.0 && scale_by_ratio >= 0.0, "Scaling is wrong"); scaled_eden_heap_delta = (size_t) (scale_by_ratio * (double) eden_heap_delta); ! log_trace(gc, ergo)("Scaled eden increment: " SIZE_FORMAT " by %f down to " SIZE_FORMAT, eden_heap_delta, scale_by_ratio, scaled_eden_heap_delta); } else if (minor_gc_cost() >= 0.0) { // Scaling is not going to work. If the minor gc time is the // larger, give it a full increment. if (minor_gc_cost() > major_gc_cost()) { scaled_eden_heap_delta =
*** 934,950 **** set_change_young_gen_for_throughput( increase_young_gen_for_througput_true); _young_gen_change_for_minor_throughput++; } ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( ! "adjusting eden for throughput (avg %f goal %f). desired_eden_size " ! SIZE_FORMAT " eden delta " SIZE_FORMAT "\n", ! mutator_cost(), _throughput_goal, ! *desired_eden_size_ptr, scaled_eden_heap_delta); ! } } size_t PSAdaptiveSizePolicy::adjust_promo_for_footprint( size_t desired_promo_size, size_t desired_sum) { assert(desired_promo_size <= desired_sum, "Inconsistent parameters"); --- 854,865 ---- set_change_young_gen_for_throughput( increase_young_gen_for_througput_true); _young_gen_change_for_minor_throughput++; } ! log_trace(gc, ergo)("Adjusting eden for throughput (avg %f goal %f). desired_eden_size " SIZE_FORMAT " eden delta " SIZE_FORMAT, ! mutator_cost(), _throughput_goal, *desired_eden_size_ptr, scaled_eden_heap_delta); } size_t PSAdaptiveSizePolicy::adjust_promo_for_footprint( size_t desired_promo_size, size_t desired_sum) { assert(desired_promo_size <= desired_sum, "Inconsistent parameters");
*** 953,971 **** size_t change = promo_decrement(desired_promo_size); change = scale_down(change, desired_promo_size, desired_sum); size_t reduced_size = desired_promo_size - change; ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( "AdaptiveSizePolicy::adjust_promo_for_footprint " "adjusting tenured gen for footprint. " "starting promo size " SIZE_FORMAT " reduced promo size " SIZE_FORMAT " promo delta " SIZE_FORMAT, desired_promo_size, reduced_size, change ); - } assert(reduced_size <= desired_promo_size, "Inconsistent result"); return reduced_size; } --- 868,884 ---- size_t change = promo_decrement(desired_promo_size); change = scale_down(change, desired_promo_size, desired_sum); size_t reduced_size = desired_promo_size - change; ! log_trace(gc, ergo)( "AdaptiveSizePolicy::adjust_promo_for_footprint " "adjusting tenured gen for footprint. " "starting promo size " SIZE_FORMAT " reduced promo size " SIZE_FORMAT " promo delta " SIZE_FORMAT, desired_promo_size, reduced_size, change ); assert(reduced_size <= desired_promo_size, "Inconsistent result"); return reduced_size; }
*** 977,995 **** size_t change = eden_decrement(desired_eden_size); change = scale_down(change, desired_eden_size, desired_sum); size_t reduced_size = desired_eden_size - change; ! if (PrintAdaptiveSizePolicy && Verbose) { ! gclog_or_tty->print_cr( "AdaptiveSizePolicy::adjust_eden_for_footprint " "adjusting eden for footprint. " " starting eden size " SIZE_FORMAT " reduced eden size " SIZE_FORMAT " eden delta " SIZE_FORMAT, desired_eden_size, reduced_size, change); - } assert(reduced_size <= desired_eden_size, "Inconsistent result"); return reduced_size; } --- 890,906 ---- size_t change = eden_decrement(desired_eden_size); change = scale_down(change, desired_eden_size, desired_sum); size_t reduced_size = desired_eden_size - change; ! log_trace(gc, ergo)( "AdaptiveSizePolicy::adjust_eden_for_footprint " "adjusting eden for footprint. " " starting eden size " SIZE_FORMAT " reduced eden size " SIZE_FORMAT " eden delta " SIZE_FORMAT, desired_eden_size, reduced_size, change); assert(reduced_size <= desired_eden_size, "Inconsistent result"); return reduced_size; }
*** 1185,1221 **** // We keep a running average of the amount promoted which is used // to decide when we should collect the old generation (when // the amount of old gen free space is less than what we expect to // promote). ! if (PrintAdaptiveSizePolicy) { ! // A little more detail if Verbose is on ! if (Verbose) { ! gclog_or_tty->print( " avg_survived: %f" ! " avg_deviation: %f", ! _avg_survived->average(), ! _avg_survived->deviation()); ! } ! ! gclog_or_tty->print( " avg_survived_padded_avg: %f", ! _avg_survived->padded_average()); ! ! if (Verbose) { ! gclog_or_tty->print( " avg_promoted_avg: %f" ! " avg_promoted_dev: %f", ! avg_promoted()->average(), ! avg_promoted()->deviation()); ! } ! ! gclog_or_tty->print_cr( " avg_promoted_padded_avg: %f" ! " avg_pretenured_padded_avg: %f" ! " tenuring_thresh: %d" ! " target_size: " SIZE_FORMAT, avg_promoted()->padded_average(), _avg_pretenured->padded_average(), tenuring_threshold, target_size); - } set_survivor_size(target_size); return tenuring_threshold; } --- 1096,1113 ---- // We keep a running average of the amount promoted which is used // to decide when we should collect the old generation (when // the amount of old gen free space is less than what we expect to // promote). ! log_trace(gc, ergo)("avg_survived: %f avg_deviation: %f", _avg_survived->average(), _avg_survived->deviation()); ! log_debug(gc, ergo)("avg_survived_padded_avg: %f", _avg_survived->padded_average()); ! ! log_trace(gc, ergo)("avg_promoted_avg: %f avg_promoted_dev: %f", avg_promoted()->average(), avg_promoted()->deviation()); ! log_debug(gc, ergo)("avg_promoted_padded_avg: %f avg_pretenured_padded_avg: %f tenuring_thresh: %d target_size: " SIZE_FORMAT, avg_promoted()->padded_average(), _avg_pretenured->padded_average(), tenuring_threshold, target_size); set_survivor_size(target_size); return tenuring_threshold; }
*** 1231,1258 **** size_t survived_guess = survived + promoted; _avg_survived->sample(survived_guess); } avg_promoted()->sample(promoted); ! if (PrintAdaptiveSizePolicy) { ! gclog_or_tty->print_cr( ! "AdaptiveSizePolicy::update_averages:" ! " survived: " SIZE_FORMAT ! " promoted: " SIZE_FORMAT ! " overflow: %s", survived, promoted, is_survivor_overflow ? "true" : "false"); - } } ! bool PSAdaptiveSizePolicy::print_adaptive_size_policy_on(outputStream* st) ! const { ! if (!UseAdaptiveSizePolicy) return false; ! return AdaptiveSizePolicy::print_adaptive_size_policy_on( ! st, ! PSScavenge::tenuring_threshold()); } #ifndef PRODUCT void TestOldFreeSpaceCalculation_test() { --- 1123,1148 ---- size_t survived_guess = survived + promoted; _avg_survived->sample(survived_guess); } avg_promoted()->sample(promoted); ! log_trace(gc, ergo)("AdaptiveSizePolicy::update_averages: survived: " SIZE_FORMAT " promoted: " SIZE_FORMAT " overflow: %s", survived, promoted, is_survivor_overflow ? "true" : "false"); } ! bool PSAdaptiveSizePolicy::print() const { ! ! if (!UseAdaptiveSizePolicy) { ! return false; ! } ! if (AdaptiveSizePolicy::print()) { ! AdaptiveSizePolicy::print_tenuring_threshold(PSScavenge::tenuring_threshold()); ! return true; ! } ! return false; } #ifndef PRODUCT void TestOldFreeSpaceCalculation_test() {
< prev index next >