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 |