--- old/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Thu Jan 27 14:03:13 2011 +++ new/src/share/vm/gc_implementation/parallelScavenge/parallelScavengeHeap.cpp Thu Jan 27 14:03:12 2011 @@ -112,7 +112,14 @@ yg_cur_size = MAX2(yg_cur_size, yg_min_size); og_min_size = align_size_up(og_min_size, og_align); - og_max_size = align_size_up(og_max_size, og_align); + // Align old gen size down to preserve specified heap size. + assert(og_align == yg_align, "sanity"); + size_t og_size = align_size_down(og_max_size, og_align); + if (og_size < og_min_size) { + og_max_size = og_min_size; + } else { + og_max_size = og_size; + } size_t og_cur_size = align_size_up(_collector_policy->old_gen_size(), og_align); og_cur_size = MAX2(og_cur_size, og_min_size);