1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Fri Jul 25 11:29:03 2008 -0700 1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp Mon Jul 28 15:30:23 2008 -0700 1.3 @@ -98,6 +98,9 @@ 1.4 // Increment the invocation count 1.5 heap->increment_total_collections(true /* full */); 1.6 1.7 + // Save information needed to minimize mangling 1.8 + heap->record_gen_tops_before_GC(); 1.9 + 1.10 // We need to track unique mark sweep invocations as well. 1.11 _total_invocations++; 1.12 1.13 @@ -188,6 +191,12 @@ 1.14 1.15 deallocate_stacks(); 1.16 1.17 + if (ZapUnusedHeapArea) { 1.18 + // Do a complete mangle (top to end) because the usage for 1.19 + // scratch does not maintain a top pointer. 1.20 + young_gen->to_space()->mangle_unused_area_complete(); 1.21 + } 1.22 + 1.23 eden_empty = young_gen->eden_space()->is_empty(); 1.24 if (!eden_empty) { 1.25 eden_empty = absorb_live_data_from_eden(size_policy, young_gen, old_gen); 1.26 @@ -198,7 +207,7 @@ 1.27 Universe::update_heap_info_at_gc(); 1.28 1.29 survivors_empty = young_gen->from_space()->is_empty() && 1.30 - young_gen->to_space()->is_empty(); 1.31 + young_gen->to_space()->is_empty(); 1.32 young_gen_empty = eden_empty && survivors_empty; 1.33 1.34 BarrierSet* bs = heap->barrier_set(); 1.35 @@ -344,6 +353,11 @@ 1.36 perm_gen->verify_object_start_array(); 1.37 } 1.38 1.39 + if (ZapUnusedHeapArea) { 1.40 + old_gen->object_space()->check_mangled_unused_area_complete(); 1.41 + perm_gen->object_space()->check_mangled_unused_area_complete(); 1.42 + } 1.43 + 1.44 NOT_PRODUCT(ref_processor()->verify_no_references_recorded()); 1.45 1.46 if (PrintHeapAtGC) {