hotspot/src/share/vm/gc/parallel/psAdaptiveSizePolicy.cpp
changeset 46619 a3919f5e8d2b
parent 46618 d503911aa948
child 46625 edefffab74e2
equal deleted inserted replaced
46618:d503911aa948 46619:a3919f5e8d2b
   368           " GCTimeLimit: " UINTX_FORMAT,
   368           " GCTimeLimit: " UINTX_FORMAT,
   369           gc_cost(), GCTimeLimit);
   369           gc_cost(), GCTimeLimit);
   370   }
   370   }
   371 
   371 
   372   // Align everything and make a final limit check
   372   // Align everything and make a final limit check
   373   desired_eden_size  = align_size_up(desired_eden_size, _space_alignment);
   373   desired_eden_size  = align_up(desired_eden_size, _space_alignment);
   374   desired_eden_size  = MAX2(desired_eden_size, _space_alignment);
   374   desired_eden_size  = MAX2(desired_eden_size, _space_alignment);
   375 
   375 
   376   eden_limit  = align_size_down(eden_limit, _space_alignment);
   376   eden_limit  = align_down(eden_limit, _space_alignment);
   377 
   377 
   378   // And one last limit check, now that we've aligned things.
   378   // And one last limit check, now that we've aligned things.
   379   if (desired_eden_size > eden_limit) {
   379   if (desired_eden_size > eden_limit) {
   380     // If the policy says to get a larger eden but
   380     // If the policy says to get a larger eden but
   381     // is hitting the limit, don't decrease eden.
   381     // is hitting the limit, don't decrease eden.
   545           " GCTimeLimit: " UINTX_FORMAT,
   545           " GCTimeLimit: " UINTX_FORMAT,
   546           gc_cost(), GCTimeLimit);
   546           gc_cost(), GCTimeLimit);
   547   }
   547   }
   548 
   548 
   549   // Align everything and make a final limit check
   549   // Align everything and make a final limit check
   550   desired_promo_size = align_size_up(desired_promo_size, _space_alignment);
   550   desired_promo_size = align_up(desired_promo_size, _space_alignment);
   551   desired_promo_size = MAX2(desired_promo_size, _space_alignment);
   551   desired_promo_size = MAX2(desired_promo_size, _space_alignment);
   552 
   552 
   553   promo_limit = align_size_down(promo_limit, _space_alignment);
   553   promo_limit = align_down(promo_limit, _space_alignment);
   554 
   554 
   555   // And one last limit check, now that we've aligned things.
   555   // And one last limit check, now that we've aligned things.
   556   desired_promo_size = MIN2(desired_promo_size, promo_limit);
   556   desired_promo_size = MIN2(desired_promo_size, promo_limit);
   557 
   557 
   558   // Timing stats
   558   // Timing stats
   923   return eden_increment(cur_eden, YoungGenerationSizeIncrement);
   923   return eden_increment(cur_eden, YoungGenerationSizeIncrement);
   924 }
   924 }
   925 
   925 
   926 size_t PSAdaptiveSizePolicy::eden_increment_aligned_up(size_t cur_eden) {
   926 size_t PSAdaptiveSizePolicy::eden_increment_aligned_up(size_t cur_eden) {
   927   size_t result = eden_increment(cur_eden, YoungGenerationSizeIncrement);
   927   size_t result = eden_increment(cur_eden, YoungGenerationSizeIncrement);
   928   return align_size_up(result, _space_alignment);
   928   return align_up(result, _space_alignment);
   929 }
   929 }
   930 
   930 
   931 size_t PSAdaptiveSizePolicy::eden_increment_aligned_down(size_t cur_eden) {
   931 size_t PSAdaptiveSizePolicy::eden_increment_aligned_down(size_t cur_eden) {
   932   size_t result = eden_increment(cur_eden);
   932   size_t result = eden_increment(cur_eden);
   933   return align_size_down(result, _space_alignment);
   933   return align_down(result, _space_alignment);
   934 }
   934 }
   935 
   935 
   936 size_t PSAdaptiveSizePolicy::eden_increment_with_supplement_aligned_up(
   936 size_t PSAdaptiveSizePolicy::eden_increment_with_supplement_aligned_up(
   937   size_t cur_eden) {
   937   size_t cur_eden) {
   938   size_t result = eden_increment(cur_eden,
   938   size_t result = eden_increment(cur_eden,
   939     YoungGenerationSizeIncrement + _young_gen_size_increment_supplement);
   939     YoungGenerationSizeIncrement + _young_gen_size_increment_supplement);
   940   return align_size_up(result, _space_alignment);
   940   return align_up(result, _space_alignment);
   941 }
   941 }
   942 
   942 
   943 size_t PSAdaptiveSizePolicy::eden_decrement_aligned_down(size_t cur_eden) {
   943 size_t PSAdaptiveSizePolicy::eden_decrement_aligned_down(size_t cur_eden) {
   944   size_t eden_heap_delta = eden_decrement(cur_eden);
   944   size_t eden_heap_delta = eden_decrement(cur_eden);
   945   return align_size_down(eden_heap_delta, _space_alignment);
   945   return align_down(eden_heap_delta, _space_alignment);
   946 }
   946 }
   947 
   947 
   948 size_t PSAdaptiveSizePolicy::eden_decrement(size_t cur_eden) {
   948 size_t PSAdaptiveSizePolicy::eden_decrement(size_t cur_eden) {
   949   size_t eden_heap_delta = eden_increment(cur_eden) /
   949   size_t eden_heap_delta = eden_increment(cur_eden) /
   950     AdaptiveSizeDecrementScaleFactor;
   950     AdaptiveSizeDecrementScaleFactor;
   962   return promo_increment(cur_promo, TenuredGenerationSizeIncrement);
   962   return promo_increment(cur_promo, TenuredGenerationSizeIncrement);
   963 }
   963 }
   964 
   964 
   965 size_t PSAdaptiveSizePolicy::promo_increment_aligned_up(size_t cur_promo) {
   965 size_t PSAdaptiveSizePolicy::promo_increment_aligned_up(size_t cur_promo) {
   966   size_t result =  promo_increment(cur_promo, TenuredGenerationSizeIncrement);
   966   size_t result =  promo_increment(cur_promo, TenuredGenerationSizeIncrement);
   967   return align_size_up(result, _space_alignment);
   967   return align_up(result, _space_alignment);
   968 }
   968 }
   969 
   969 
   970 size_t PSAdaptiveSizePolicy::promo_increment_aligned_down(size_t cur_promo) {
   970 size_t PSAdaptiveSizePolicy::promo_increment_aligned_down(size_t cur_promo) {
   971   size_t result =  promo_increment(cur_promo, TenuredGenerationSizeIncrement);
   971   size_t result =  promo_increment(cur_promo, TenuredGenerationSizeIncrement);
   972   return align_size_down(result, _space_alignment);
   972   return align_down(result, _space_alignment);
   973 }
   973 }
   974 
   974 
   975 size_t PSAdaptiveSizePolicy::promo_increment_with_supplement_aligned_up(
   975 size_t PSAdaptiveSizePolicy::promo_increment_with_supplement_aligned_up(
   976   size_t cur_promo) {
   976   size_t cur_promo) {
   977   size_t result =  promo_increment(cur_promo,
   977   size_t result =  promo_increment(cur_promo,
   978     TenuredGenerationSizeIncrement + _old_gen_size_increment_supplement);
   978     TenuredGenerationSizeIncrement + _old_gen_size_increment_supplement);
   979   return align_size_up(result, _space_alignment);
   979   return align_up(result, _space_alignment);
   980 }
   980 }
   981 
   981 
   982 size_t PSAdaptiveSizePolicy::promo_decrement_aligned_down(size_t cur_promo) {
   982 size_t PSAdaptiveSizePolicy::promo_decrement_aligned_down(size_t cur_promo) {
   983   size_t promo_heap_delta = promo_decrement(cur_promo);
   983   size_t promo_heap_delta = promo_decrement(cur_promo);
   984   return align_size_down(promo_heap_delta, _space_alignment);
   984   return align_down(promo_heap_delta, _space_alignment);
   985 }
   985 }
   986 
   986 
   987 size_t PSAdaptiveSizePolicy::promo_decrement(size_t cur_promo) {
   987 size_t PSAdaptiveSizePolicy::promo_decrement(size_t cur_promo) {
   988   size_t promo_heap_delta = promo_increment(cur_promo);
   988   size_t promo_heap_delta = promo_increment(cur_promo);
   989   promo_heap_delta = promo_heap_delta / AdaptiveSizeDecrementScaleFactor;
   989   promo_heap_delta = promo_heap_delta / AdaptiveSizeDecrementScaleFactor;
   994                                              bool is_survivor_overflow,
   994                                              bool is_survivor_overflow,
   995                                              uint tenuring_threshold,
   995                                              uint tenuring_threshold,
   996                                              size_t survivor_limit) {
   996                                              size_t survivor_limit) {
   997   assert(survivor_limit >= _space_alignment,
   997   assert(survivor_limit >= _space_alignment,
   998          "survivor_limit too small");
   998          "survivor_limit too small");
   999   assert(is_size_aligned(survivor_limit, _space_alignment),
   999   assert(is_aligned(survivor_limit, _space_alignment),
  1000          "survivor_limit not aligned");
  1000          "survivor_limit not aligned");
  1001 
  1001 
  1002   // This method is called even if the tenuring threshold and survivor
  1002   // This method is called even if the tenuring threshold and survivor
  1003   // spaces are not adjusted so that the averages are sampled above.
  1003   // spaces are not adjusted so that the averages are sampled above.
  1004   if (!UsePSAdaptiveSurvivorSizePolicy ||
  1004   if (!UsePSAdaptiveSurvivorSizePolicy ||
  1057 
  1057 
  1058   // The padded average also maintains a deviation from the average;
  1058   // The padded average also maintains a deviation from the average;
  1059   // we use this to see how good of an estimate we have of what survived.
  1059   // we use this to see how good of an estimate we have of what survived.
  1060   // We're trying to pad the survivor size as little as possible without
  1060   // We're trying to pad the survivor size as little as possible without
  1061   // overflowing the survivor spaces.
  1061   // overflowing the survivor spaces.
  1062   size_t target_size = align_size_up((size_t)_avg_survived->padded_average(),
  1062   size_t target_size = align_up((size_t)_avg_survived->padded_average(),
  1063                                      _space_alignment);
  1063                                      _space_alignment);
  1064   target_size = MAX2(target_size, _space_alignment);
  1064   target_size = MAX2(target_size, _space_alignment);
  1065 
  1065 
  1066   if (target_size > survivor_limit) {
  1066   if (target_size > survivor_limit) {
  1067     // Target size is bigger than we can handle. Let's also reduce
  1067     // Target size is bigger than we can handle. Let's also reduce