< prev index next >

src/share/vm/gc/serial/tenuredGeneration.cpp

Print this page

        

*** 30,39 **** --- 30,40 ---- #include "gc/shared/collectorCounters.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/genOopClosures.inline.hpp" #include "gc/shared/generationSpec.hpp" #include "gc/shared/space.hpp" + #include "logging/log.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS
*** 79,124 **** bool is_tlab) { // This should be one big conditional or (||), but I want to be able to tell // why it returns what it returns (without re-evaluating the conditionals // in case they aren't idempotent), so I'm doing it this way. // DeMorgan says it's okay. ! bool result = false; ! if (!result && full) { ! result = true; ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr("TenuredGeneration::should_collect: because" ! " full"); ! } ! } ! if (!result && should_allocate(size, is_tlab)) { ! result = true; ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr("TenuredGeneration::should_collect: because" ! " should_allocate(" SIZE_FORMAT ")", ! size); ! } } // If we don't have very much free space. // XXX: 10000 should be a percentage of the capacity!!! ! if (!result && free() < 10000) { ! result = true; ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr("TenuredGeneration::should_collect: because" ! " free(): " SIZE_FORMAT, ! free()); ! } } // If we had to expand to accommodate promotions from the young generation ! if (!result && _capacity_at_prologue < capacity()) { ! result = true; ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr("TenuredGeneration::should_collect: because" ! "_capacity_at_prologue: " SIZE_FORMAT " < capacity(): " SIZE_FORMAT, _capacity_at_prologue, capacity()); } ! } ! return result; } void TenuredGeneration::compute_new_size() { assert_locked_or_safepoint(Heap_lock); --- 80,111 ---- bool is_tlab) { // This should be one big conditional or (||), but I want to be able to tell // why it returns what it returns (without re-evaluating the conditionals // in case they aren't idempotent), so I'm doing it this way. // DeMorgan says it's okay. ! if (full) { ! log_trace(gc)("TenuredGeneration::should_collect: because full"); ! return true; ! } ! if (should_allocate(size, is_tlab)) { ! log_trace(gc)("TenuredGeneration::should_collect: because should_allocate(" SIZE_FORMAT ")", size); ! return true; } // If we don't have very much free space. // XXX: 10000 should be a percentage of the capacity!!! ! if (free() < 10000) { ! log_trace(gc)("TenuredGeneration::should_collect: because free(): " SIZE_FORMAT, free()); ! return true; } // If we had to expand to accommodate promotions from the young generation ! if (_capacity_at_prologue < capacity()) { ! log_trace(gc)("TenuredGeneration::should_collect: because_capacity_at_prologue: " SIZE_FORMAT " < capacity(): " SIZE_FORMAT, _capacity_at_prologue, capacity()); + return true; } ! ! return false; } void TenuredGeneration::compute_new_size() { assert_locked_or_safepoint(Heap_lock);
*** 163,179 **** bool TenuredGeneration::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const { size_t available = max_contiguous_available(); size_t av_promo = (size_t)gc_stats()->avg_promoted()->padded_average(); bool res = (available >= av_promo) || (available >= max_promotion_in_bytes); ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr( ! "Tenured: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT ")," ! "max_promo(" SIZE_FORMAT ")", ! res? "":" not", available, res? ">=":"<", ! av_promo, max_promotion_in_bytes); ! } return res; } void TenuredGeneration::collect(bool full, bool clear_all_soft_refs, --- 150,163 ---- bool TenuredGeneration::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const { size_t available = max_contiguous_available(); size_t av_promo = (size_t)gc_stats()->avg_promoted()->padded_average(); bool res = (available >= av_promo) || (available >= max_promotion_in_bytes); ! ! log_trace(gc)("Tenured: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT "), max_promo(" SIZE_FORMAT ")", ! res? "":" not", available, res? ">=":"<", av_promo, max_promotion_in_bytes); ! return res; } void TenuredGeneration::collect(bool full, bool clear_all_soft_refs,
< prev index next >