< prev index next >

src/share/vm/gc/shared/cardGeneration.cpp

Print this page

        

*** 31,40 **** --- 31,41 ---- #include "gc/shared/genOopClosures.inline.hpp" #include "gc/shared/generationSpec.hpp" #include "gc/shared/space.inline.hpp" #include "memory/iterator.hpp" #include "memory/memRegion.hpp" + #include "logging/log.hpp" #include "runtime/java.hpp" CardGeneration::CardGeneration(ReservedSpace rs, size_t initial_byte_size, CardTableRS* remset) :
*** 94,111 **** space()->set_end((HeapWord*)_virtual_space.high()); // update the space and generation capacity counters update_counters(); - if (Verbose && PrintGC) { size_t new_mem_size = _virtual_space.committed_size(); size_t old_mem_size = new_mem_size - bytes; ! gclog_or_tty->print_cr("Expanding %s from " SIZE_FORMAT "K by " ! SIZE_FORMAT "K to " SIZE_FORMAT "K", name(), old_mem_size/K, bytes/K, new_mem_size/K); } - } return result; } bool CardGeneration::expand(size_t bytes, size_t expand_bytes) { assert_locked_or_safepoint(Heap_lock); --- 95,109 ---- space()->set_end((HeapWord*)_virtual_space.high()); // update the space and generation capacity counters update_counters(); size_t new_mem_size = _virtual_space.committed_size(); size_t old_mem_size = new_mem_size - bytes; ! log_trace(gc, heap)("Expanding %s from " SIZE_FORMAT "K by " SIZE_FORMAT "K to " SIZE_FORMAT "K", name(), old_mem_size/K, bytes/K, new_mem_size/K); } return result; } bool CardGeneration::expand(size_t bytes, size_t expand_bytes) { assert_locked_or_safepoint(Heap_lock);
*** 131,144 **** success = grow_by(aligned_bytes); } if (!success) { success = grow_to_reserved(); } - if (PrintGC && Verbose) { if (success && GC_locker::is_active_and_needs_gc()) { ! gclog_or_tty->print_cr("Garbage collection disabled, expanded heap instead"); ! } } return success; } --- 129,140 ---- success = grow_by(aligned_bytes); } if (!success) { success = grow_to_reserved(); } if (success && GC_locker::is_active_and_needs_gc()) { ! log_trace(gc, heap)("Garbage collection disabled, expanded heap instead"); } return success; }
*** 170,185 **** _bts->resize(new_word_size); MemRegion mr(space()->bottom(), new_word_size); // Shrink the card table GenCollectedHeap::heap()->barrier_set()->resize_covered_region(mr); - if (Verbose && PrintGC) { size_t new_mem_size = _virtual_space.committed_size(); size_t old_mem_size = new_mem_size + size; ! gclog_or_tty->print_cr("Shrinking %s from " SIZE_FORMAT "K to " SIZE_FORMAT "K", name(), old_mem_size/K, new_mem_size/K); - } } // No young generation references, clear this generation's cards. void CardGeneration::clear_remembered_set() { _rs->clear(reserved()); --- 166,179 ---- _bts->resize(new_word_size); MemRegion mr(space()->bottom(), new_word_size); // Shrink the card table GenCollectedHeap::heap()->barrier_set()->resize_covered_region(mr); size_t new_mem_size = _virtual_space.committed_size(); size_t old_mem_size = new_mem_size + size; ! log_trace(gc, heap)("Shrinking %s from " SIZE_FORMAT "K to " SIZE_FORMAT "K", name(), old_mem_size/K, new_mem_size/K); } // No young generation references, clear this generation's cards. void CardGeneration::clear_remembered_set() { _rs->clear(reserved());
*** 209,255 **** size_t minimum_desired_capacity = (size_t)MIN2(min_tmp, double(max_uintx)); // Don't shrink less than the initial generation size minimum_desired_capacity = MAX2(minimum_desired_capacity, initial_size()); assert(used_after_gc <= minimum_desired_capacity, "sanity check"); - if (PrintGC && Verbose) { const size_t free_after_gc = free(); const double free_percentage = ((double)free_after_gc) / capacity_after_gc; ! gclog_or_tty->print_cr("TenuredGeneration::compute_new_size: "); ! gclog_or_tty->print_cr(" " ! " minimum_free_percentage: %6.2f" ! " maximum_used_percentage: %6.2f", minimum_free_percentage, maximum_used_percentage); ! gclog_or_tty->print_cr(" " ! " free_after_gc : %6.1fK" ! " used_after_gc : %6.1fK" ! " capacity_after_gc : %6.1fK", free_after_gc / (double) K, used_after_gc / (double) K, capacity_after_gc / (double) K); ! gclog_or_tty->print_cr(" " ! " free_percentage: %6.2f", ! free_percentage); ! } if (capacity_after_gc < minimum_desired_capacity) { // If we have less free space than we want then expand size_t expand_bytes = minimum_desired_capacity - capacity_after_gc; // Don't expand unless it's significant if (expand_bytes >= _min_heap_delta_bytes) { expand(expand_bytes, 0); // safe if expansion fails } ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr(" expanding:" ! " minimum_desired_capacity: %6.1fK" ! " expand_bytes: %6.1fK" ! " _min_heap_delta_bytes: %6.1fK", minimum_desired_capacity / (double) K, expand_bytes / (double) K, _min_heap_delta_bytes / (double) K); - } return; } // No expansion, now see if we want to shrink size_t shrink_bytes = 0; --- 203,235 ---- size_t minimum_desired_capacity = (size_t)MIN2(min_tmp, double(max_uintx)); // Don't shrink less than the initial generation size minimum_desired_capacity = MAX2(minimum_desired_capacity, initial_size()); assert(used_after_gc <= minimum_desired_capacity, "sanity check"); const size_t free_after_gc = free(); const double free_percentage = ((double)free_after_gc) / capacity_after_gc; ! log_trace(gc, heap)("TenuredGeneration::compute_new_size:"); ! log_trace(gc, heap)(" minimum_free_percentage: %6.2f maximum_used_percentage: %6.2f", minimum_free_percentage, maximum_used_percentage); ! log_trace(gc, heap)(" free_after_gc : %6.1fK used_after_gc : %6.1fK capacity_after_gc : %6.1fK", free_after_gc / (double) K, used_after_gc / (double) K, capacity_after_gc / (double) K); ! log_trace(gc, heap)(" free_percentage: %6.2f", free_percentage); if (capacity_after_gc < minimum_desired_capacity) { // If we have less free space than we want then expand size_t expand_bytes = minimum_desired_capacity - capacity_after_gc; // Don't expand unless it's significant if (expand_bytes >= _min_heap_delta_bytes) { expand(expand_bytes, 0); // safe if expansion fails } ! log_trace(gc, heap)(" expanding: minimum_desired_capacity: %6.1fK expand_bytes: %6.1fK _min_heap_delta_bytes: %6.1fK", minimum_desired_capacity / (double) K, expand_bytes / (double) K, _min_heap_delta_bytes / (double) K); return; } // No expansion, now see if we want to shrink size_t shrink_bytes = 0;
*** 260,283 **** const double maximum_free_percentage = MaxHeapFreeRatio / 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)); maximum_desired_capacity = MAX2(maximum_desired_capacity, initial_size()); ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr(" " ! " maximum_free_percentage: %6.2f" ! " minimum_used_percentage: %6.2f", ! maximum_free_percentage, ! minimum_used_percentage); ! gclog_or_tty->print_cr(" " ! " _capacity_at_prologue: %6.1fK" ! " minimum_desired_capacity: %6.1fK" ! " maximum_desired_capacity: %6.1fK", _capacity_at_prologue / (double) K, minimum_desired_capacity / (double) K, maximum_desired_capacity / (double) K); - } assert(minimum_desired_capacity <= maximum_desired_capacity, "sanity check"); if (capacity_after_gc > maximum_desired_capacity) { // Capacity too large, compute shrinking size --- 240,255 ---- const double maximum_free_percentage = MaxHeapFreeRatio / 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)); maximum_desired_capacity = MAX2(maximum_desired_capacity, initial_size()); ! log_trace(gc, heap)(" maximum_free_percentage: %6.2f minimum_used_percentage: %6.2f", ! maximum_free_percentage, minimum_used_percentage); ! log_trace(gc, heap)(" _capacity_at_prologue: %6.1fK minimum_desired_capacity: %6.1fK maximum_desired_capacity: %6.1fK", _capacity_at_prologue / (double) K, minimum_desired_capacity / (double) K, maximum_desired_capacity / (double) K); assert(minimum_desired_capacity <= maximum_desired_capacity, "sanity check"); if (capacity_after_gc > maximum_desired_capacity) { // Capacity too large, compute shrinking size
*** 293,344 **** if (current_shrink_factor == 0) { _shrink_factor = 10; } else { _shrink_factor = MIN2(current_shrink_factor * 4, (size_t) 100); } ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr(" " ! " shrinking:" ! " initSize: %.1fK" ! " maximum_desired_capacity: %.1fK", ! initial_size() / (double) K, ! maximum_desired_capacity / (double) K); ! gclog_or_tty->print_cr(" " ! " shrink_bytes: %.1fK" ! " current_shrink_factor: " SIZE_FORMAT ! " new shrink factor: " SIZE_FORMAT ! " _min_heap_delta_bytes: %.1fK", shrink_bytes / (double) K, current_shrink_factor, _shrink_factor, _min_heap_delta_bytes / (double) K); } } - } if (capacity_after_gc > _capacity_at_prologue) { // We might have expanded for promotions, in which case we might want to // take back that expansion if there's room after GC. That keeps us from // stretching the heap with promotions when there's plenty of room. size_t expansion_for_promotion = capacity_after_gc - _capacity_at_prologue; expansion_for_promotion = MIN2(expansion_for_promotion, max_shrink_bytes); // We have two shrinking computations, take the largest shrink_bytes = MAX2(shrink_bytes, expansion_for_promotion); assert(shrink_bytes <= max_shrink_bytes, "invalid shrink size"); ! if (PrintGC && Verbose) { ! gclog_or_tty->print_cr(" " ! " aggressive shrinking:" ! " _capacity_at_prologue: %.1fK" ! " capacity_after_gc: %.1fK" ! " expansion_for_promotion: %.1fK" ! " shrink_bytes: %.1fK", capacity_after_gc / (double) K, _capacity_at_prologue / (double) K, expansion_for_promotion / (double) K, shrink_bytes / (double) K); } - } // Don't shrink unless it's significant if (shrink_bytes >= _min_heap_delta_bytes) { shrink(shrink_bytes); } } --- 265,299 ---- if (current_shrink_factor == 0) { _shrink_factor = 10; } else { _shrink_factor = MIN2(current_shrink_factor * 4, (size_t) 100); } ! log_trace(gc, heap)(" shrinking: initSize: %.1fK maximum_desired_capacity: %.1fK", ! initial_size() / (double) K, maximum_desired_capacity / (double) K); ! log_trace(gc, heap)(" shrink_bytes: %.1fK current_shrink_factor: " SIZE_FORMAT " new shrink factor: " SIZE_FORMAT " _min_heap_delta_bytes: %.1fK", shrink_bytes / (double) K, current_shrink_factor, _shrink_factor, _min_heap_delta_bytes / (double) K); } } if (capacity_after_gc > _capacity_at_prologue) { // We might have expanded for promotions, in which case we might want to // take back that expansion if there's room after GC. That keeps us from // stretching the heap with promotions when there's plenty of room. size_t expansion_for_promotion = capacity_after_gc - _capacity_at_prologue; expansion_for_promotion = MIN2(expansion_for_promotion, max_shrink_bytes); // We have two shrinking computations, take the largest shrink_bytes = MAX2(shrink_bytes, expansion_for_promotion); assert(shrink_bytes <= max_shrink_bytes, "invalid shrink size"); ! log_trace(gc, heap)(" aggressive shrinking: _capacity_at_prologue: %.1fK capacity_after_gc: %.1fK expansion_for_promotion: %.1fK shrink_bytes: %.1fK", capacity_after_gc / (double) K, _capacity_at_prologue / (double) K, expansion_for_promotion / (double) K, shrink_bytes / (double) K); } // Don't shrink unless it's significant if (shrink_bytes >= _min_heap_delta_bytes) { shrink(shrink_bytes); } }
< prev index next >