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());
+ }
+ }