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

changeset 704
850fdf70db2b
parent 698
12eea04c8b06
child 772
9ee9cf798b59
child 809
a4b729f5b611
     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) {

mercurial