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

changeset 4037
da91efe96a93
parent 3712
dde53abda3d6
child 4128
f81a7c0c618d
     1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp	Fri Aug 31 16:39:35 2012 -0700
     1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/cardTableExtension.cpp	Sat Sep 01 13:25:18 2012 -0400
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -89,7 +89,7 @@
    1.11    // fail unless the object head is also unmarked.
    1.12    virtual void do_object(oop obj) {
    1.13      CheckForUnmarkedOops object_check(_young_gen, _card_table);
    1.14 -    obj->oop_iterate(&object_check);
    1.15 +    obj->oop_iterate_no_header(&object_check);
    1.16      if (object_check.has_unmarked_oop()) {
    1.17        assert(_card_table->addr_is_marked_imprecise(obj), "Found unmarked young_gen object");
    1.18      }
    1.19 @@ -229,8 +229,9 @@
    1.20    int dirty_card_count = 0;
    1.21  
    1.22    oop* sp_top = (oop*)space_top;
    1.23 +  oop* sp_last = sp->bottom() == space_top ? sp_top : sp_top - 1;
    1.24    jbyte* start_card = byte_for(sp->bottom());
    1.25 -  jbyte* end_card   = byte_for(sp_top - 1) + 1;
    1.26 +  jbyte* end_card   = byte_for(sp_last) + 1;
    1.27    oop* last_scanned = NULL; // Prevent scanning objects more than once
    1.28    // The width of the stripe ssize*stripe_total must be
    1.29    // consistent with the number of stripes so that the complete slice
    1.30 @@ -406,10 +407,8 @@
    1.31    assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity");
    1.32  
    1.33    PSOldGen* old_gen = heap->old_gen();
    1.34 -  PSPermGen* perm_gen = heap->perm_gen();
    1.35  
    1.36    old_gen->object_iterate(&check);
    1.37 -  perm_gen->object_iterate(&check);
    1.38  }
    1.39  
    1.40  // This should be called immediately after a scavenge, before mutators resume.
    1.41 @@ -418,15 +417,12 @@
    1.42    assert(heap->kind() == CollectedHeap::ParallelScavengeHeap, "Sanity");
    1.43  
    1.44    PSOldGen* old_gen = heap->old_gen();
    1.45 -  PSPermGen* perm_gen = heap->perm_gen();
    1.46  
    1.47    CheckForPreciseMarks check(heap->young_gen(), (CardTableExtension*)heap->barrier_set());
    1.48  
    1.49 -  old_gen->oop_iterate(&check);
    1.50 -  perm_gen->oop_iterate(&check);
    1.51 +  old_gen->oop_iterate_no_header(&check);
    1.52  
    1.53    verify_all_young_refs_precise_helper(old_gen->object_space()->used_region());
    1.54 -  verify_all_young_refs_precise_helper(perm_gen->object_space()->used_region());
    1.55  }
    1.56  
    1.57  void CardTableExtension::verify_all_young_refs_precise_helper(MemRegion mr) {

mercurial