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

changeset 548
ba764ed4b6f2
parent 514
82db0859acbe
child 577
8bd1e4487c18
     1.1 --- a/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Fri Apr 11 09:56:35 2008 -0400
     1.2 +++ b/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp	Sun Apr 13 17:43:42 2008 -0400
     1.3 @@ -81,14 +81,14 @@
     1.4  #endif  // #ifdef ASSERT
     1.5  
     1.6  #ifdef VALIDATE_MARK_SWEEP
     1.7 -GrowableArray<oop*>*    PSParallelCompact::_root_refs_stack = NULL;
     1.8 +GrowableArray<void*>*   PSParallelCompact::_root_refs_stack = NULL;
     1.9  GrowableArray<oop> *    PSParallelCompact::_live_oops = NULL;
    1.10  GrowableArray<oop> *    PSParallelCompact::_live_oops_moved_to = NULL;
    1.11  GrowableArray<size_t>*  PSParallelCompact::_live_oops_size = NULL;
    1.12  size_t                  PSParallelCompact::_live_oops_index = 0;
    1.13  size_t                  PSParallelCompact::_live_oops_index_at_perm = 0;
    1.14 -GrowableArray<oop*>*    PSParallelCompact::_other_refs_stack = NULL;
    1.15 -GrowableArray<oop*>*    PSParallelCompact::_adjusted_pointers = NULL;
    1.16 +GrowableArray<void*>*   PSParallelCompact::_other_refs_stack = NULL;
    1.17 +GrowableArray<void*>*   PSParallelCompact::_adjusted_pointers = NULL;
    1.18  bool                    PSParallelCompact::_pointer_tracking = false;
    1.19  bool                    PSParallelCompact::_root_tracking = true;
    1.20  
    1.21 @@ -811,46 +811,23 @@
    1.22  ParallelCompactData PSParallelCompact::_summary_data;
    1.23  
    1.24  PSParallelCompact::IsAliveClosure PSParallelCompact::_is_alive_closure;
    1.25 +
    1.26 +void PSParallelCompact::IsAliveClosure::do_object(oop p)   { ShouldNotReachHere(); }
    1.27 +bool PSParallelCompact::IsAliveClosure::do_object_b(oop p) { return mark_bitmap()->is_marked(p); }
    1.28 +
    1.29 +void PSParallelCompact::KeepAliveClosure::do_oop(oop* p)       { PSParallelCompact::KeepAliveClosure::do_oop_work(p); }
    1.30 +void PSParallelCompact::KeepAliveClosure::do_oop(narrowOop* p) { PSParallelCompact::KeepAliveClosure::do_oop_work(p); }
    1.31 +
    1.32  PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_root_pointer_closure(true);
    1.33  PSParallelCompact::AdjustPointerClosure PSParallelCompact::_adjust_pointer_closure(false);
    1.34  
    1.35 -void PSParallelCompact::KeepAliveClosure::do_oop(oop* p) {
    1.36 -#ifdef VALIDATE_MARK_SWEEP
    1.37 -  if (ValidateMarkSweep) {
    1.38 -    if (!Universe::heap()->is_in_reserved(p)) {
    1.39 -      _root_refs_stack->push(p);
    1.40 -    } else {
    1.41 -      _other_refs_stack->push(p);
    1.42 -    }
    1.43 -  }
    1.44 -#endif
    1.45 -  mark_and_push(_compaction_manager, p);
    1.46 -}
    1.47 -
    1.48 -void PSParallelCompact::mark_and_follow(ParCompactionManager* cm,
    1.49 -                                        oop* p) {
    1.50 -  assert(Universe::heap()->is_in_reserved(p),
    1.51 -         "we should only be traversing objects here");
    1.52 -  oop m = *p;
    1.53 -  if (m != NULL && mark_bitmap()->is_unmarked(m)) {
    1.54 -    if (mark_obj(m)) {
    1.55 -      m->follow_contents(cm);  // Follow contents of the marked object
    1.56 -    }
    1.57 -  }
    1.58 -}
    1.59 -
    1.60 -// Anything associated with this variable is temporary.
    1.61 -
    1.62 -void PSParallelCompact::mark_and_push_internal(ParCompactionManager* cm,
    1.63 -                                               oop* p) {
    1.64 -  // Push marked object, contents will be followed later
    1.65 -  oop m = *p;
    1.66 -  if (mark_obj(m)) {
    1.67 -    // This thread marked the object and
    1.68 -    // owns the subsequent processing of it.
    1.69 -    cm->save_for_scanning(m);
    1.70 -  }
    1.71 -}
    1.72 +void PSParallelCompact::AdjustPointerClosure::do_oop(oop* p)       { adjust_pointer(p, _is_root); }
    1.73 +void PSParallelCompact::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p, _is_root); }
    1.74 +
    1.75 +void PSParallelCompact::FollowStackClosure::do_void() { follow_stack(_compaction_manager); }
    1.76 +
    1.77 +void PSParallelCompact::MarkAndPushClosure::do_oop(oop* p)       { mark_and_push(_compaction_manager, p); }
    1.78 +void PSParallelCompact::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(_compaction_manager, p); }
    1.79  
    1.80  void PSParallelCompact::post_initialize() {
    1.81    ParallelScavengeHeap* heap = gc_heap();
    1.82 @@ -2751,23 +2728,6 @@
    1.83    young_gen->move_and_update(cm);
    1.84  }
    1.85  
    1.86 -void PSParallelCompact::follow_root(ParCompactionManager* cm, oop* p) {
    1.87 -  assert(!Universe::heap()->is_in_reserved(p),
    1.88 -         "roots shouldn't be things within the heap");
    1.89 -#ifdef VALIDATE_MARK_SWEEP
    1.90 -  if (ValidateMarkSweep) {
    1.91 -    guarantee(!_root_refs_stack->contains(p), "should only be in here once");
    1.92 -    _root_refs_stack->push(p);
    1.93 -  }
    1.94 -#endif
    1.95 -  oop m = *p;
    1.96 -  if (m != NULL && mark_bitmap()->is_unmarked(m)) {
    1.97 -    if (mark_obj(m)) {
    1.98 -      m->follow_contents(cm);  // Follow contents of the marked object
    1.99 -    }
   1.100 -  }
   1.101 -  follow_stack(cm);
   1.102 -}
   1.103  
   1.104  void PSParallelCompact::follow_stack(ParCompactionManager* cm) {
   1.105    while(!cm->overflow_stack()->is_empty()) {
   1.106 @@ -2807,7 +2767,7 @@
   1.107  
   1.108  #ifdef VALIDATE_MARK_SWEEP
   1.109  
   1.110 -void PSParallelCompact::track_adjusted_pointer(oop* p, oop newobj, bool isroot) {
   1.111 +void PSParallelCompact::track_adjusted_pointer(void* p, bool isroot) {
   1.112    if (!ValidateMarkSweep)
   1.113      return;
   1.114  
   1.115 @@ -2821,7 +2781,7 @@
   1.116      if (index != -1) {
   1.117        int l = _root_refs_stack->length();
   1.118        if (l > 0 && l - 1 != index) {
   1.119 -        oop* last = _root_refs_stack->pop();
   1.120 +        void* last = _root_refs_stack->pop();
   1.121          assert(last != p, "should be different");
   1.122          _root_refs_stack->at_put(index, last);
   1.123        } else {
   1.124 @@ -2832,7 +2792,7 @@
   1.125  }
   1.126  
   1.127  
   1.128 -void PSParallelCompact::check_adjust_pointer(oop* p) {
   1.129 +void PSParallelCompact::check_adjust_pointer(void* p) {
   1.130    _adjusted_pointers->push(p);
   1.131  }
   1.132  
   1.133 @@ -2840,7 +2800,8 @@
   1.134  class AdjusterTracker: public OopClosure {
   1.135   public:
   1.136    AdjusterTracker() {};
   1.137 -  void do_oop(oop* o)   { PSParallelCompact::check_adjust_pointer(o); }
   1.138 +  void do_oop(oop* o)         { PSParallelCompact::check_adjust_pointer(o); }
   1.139 +  void do_oop(narrowOop* o)   { PSParallelCompact::check_adjust_pointer(o); }
   1.140  };
   1.141  
   1.142  
   1.143 @@ -2948,25 +2909,6 @@
   1.144  }
   1.145  #endif //VALIDATE_MARK_SWEEP
   1.146  
   1.147 -void PSParallelCompact::adjust_pointer(oop* p, bool isroot) {
   1.148 -  oop obj = *p;
   1.149 -  VALIDATE_MARK_SWEEP_ONLY(oop saved_new_pointer = NULL);
   1.150 -  if (obj != NULL) {
   1.151 -    oop new_pointer = (oop) summary_data().calc_new_pointer(obj);
   1.152 -    assert(new_pointer != NULL ||                     // is forwarding ptr?
   1.153 -           obj->is_shared(),                          // never forwarded?
   1.154 -           "should have a new location");
   1.155 -    // Just always do the update unconditionally?
   1.156 -    if (new_pointer != NULL) {
   1.157 -      *p = new_pointer;
   1.158 -      assert(Universe::heap()->is_in_reserved(new_pointer),
   1.159 -             "should be in object space");
   1.160 -      VALIDATE_MARK_SWEEP_ONLY(saved_new_pointer = new_pointer);
   1.161 -    }
   1.162 -  }
   1.163 -  VALIDATE_MARK_SWEEP_ONLY(track_adjusted_pointer(p, saved_new_pointer, isroot));
   1.164 -}
   1.165 -
   1.166  // Update interior oops in the ranges of chunks [beg_chunk, end_chunk).
   1.167  void
   1.168  PSParallelCompact::update_and_deadwood_in_dense_prefix(ParCompactionManager* cm,

mercurial