src/share/vm/gc_implementation/parallelScavenge/psOldGen.cpp

Print this page

        

*** 306,325 **** assert_locked_or_safepoint(Heap_lock); size_t size = align_size_down(bytes, virtual_space()->alignment()); if (size > 0) { assert_lock_strong(ExpandHeap_lock); ! virtual_space()->shrink_by(bytes); post_resize(); 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("Shrinking %s from " SIZE_FORMAT "K by " SIZE_FORMAT "K to " SIZE_FORMAT "K", ! name(), old_mem_size/K, bytes/K, new_mem_size/K); } } } void PSOldGen::resize(size_t desired_free_space) { --- 306,325 ---- assert_locked_or_safepoint(Heap_lock); size_t size = align_size_down(bytes, virtual_space()->alignment()); if (size > 0) { assert_lock_strong(ExpandHeap_lock); ! virtual_space()->shrink_by(size); post_resize(); 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 by " SIZE_FORMAT "K to " SIZE_FORMAT "K", ! name(), old_mem_size/K, size/K, new_mem_size/K); } } } void PSOldGen::resize(size_t desired_free_space) {
*** 495,499 **** --- 495,522 ---- void PSOldGen::record_spaces_top() { assert(ZapUnusedHeapArea, "Not mangling unused space"); object_space()->set_top_for_allocations(); } #endif + + void PSOldGen::try_to_shrink_by(size_t shrink_bytes) { + if (shrink_bytes < MinHeapDeltaBytes || + capacity_in_bytes() - shrink_bytes < _init_gen_size) { + return; + } + + if (PrintGC) { + gclog_or_tty->print_cr(" Resizing old gen. shrink_bytes=%d", shrink_bytes); + gclog_or_tty->print("BEFORE: Old Gen: "); + gclog_or_tty->print("capacity : " SIZE_FORMAT ", ", capacity_in_bytes()); + gclog_or_tty->print_cr("used : " SIZE_FORMAT ", " , used_in_bytes()); + } + + MutexLocker x(ExpandHeap_lock); + shrink(shrink_bytes); + + if (PrintGC) { + gclog_or_tty->print("AFTER: Old Gen: "); + gclog_or_tty->print("capacity : " SIZE_FORMAT ", ", capacity_in_bytes()); + gclog_or_tty->print_cr("used : " SIZE_FORMAT ", " , used_in_bytes()); + } + }