src/share/vm/memory/compactingPermGenGen.cpp

changeset 548
ba764ed4b6f2
parent 482
2c106685d6d0
child 631
d1605aabd0a1
     1.1 --- a/src/share/vm/memory/compactingPermGenGen.cpp	Fri Apr 11 09:56:35 2008 -0400
     1.2 +++ b/src/share/vm/memory/compactingPermGenGen.cpp	Sun Apr 13 17:43:42 2008 -0400
     1.3 @@ -49,9 +49,9 @@
     1.4  // to prevent visiting any object twice.
     1.5  
     1.6  class RecursiveAdjustSharedObjectClosure : public OopClosure {
     1.7 -public:
     1.8 -  void do_oop(oop* o) {
     1.9 -    oop obj = *o;
    1.10 + protected:
    1.11 +  template <class T> inline void do_oop_work(T* p) {
    1.12 +    oop obj = oopDesc::load_decode_heap_oop_not_null(p);
    1.13      if (obj->is_shared_readwrite()) {
    1.14        if (obj->mark()->is_marked()) {
    1.15          obj->init_mark();         // Don't revisit this object.
    1.16 @@ -71,7 +71,10 @@
    1.17          }
    1.18        }
    1.19      }
    1.20 -  };
    1.21 +  }
    1.22 + public:
    1.23 +  virtual void do_oop(oop* p)       { RecursiveAdjustSharedObjectClosure::do_oop_work(p); }
    1.24 +  virtual void do_oop(narrowOop* p) { RecursiveAdjustSharedObjectClosure::do_oop_work(p); }
    1.25  };
    1.26  
    1.27  
    1.28 @@ -86,9 +89,9 @@
    1.29  // as doing so can cause hash codes to be computed, destroying
    1.30  // forwarding pointers.
    1.31  class TraversePlaceholdersClosure : public OopClosure {
    1.32 - public:
    1.33 -  void do_oop(oop* o) {
    1.34 -    oop obj = *o;
    1.35 + protected:
    1.36 +  template <class T> inline void do_oop_work(T* p) {
    1.37 +    oop obj = oopDesc::load_decode_heap_oop_not_null(p);
    1.38      if (obj->klass() == Universe::symbolKlassObj() &&
    1.39          obj->is_shared_readonly()) {
    1.40        symbolHandle sym((symbolOop) obj);
    1.41 @@ -99,6 +102,10 @@
    1.42        }
    1.43      }
    1.44    }
    1.45 + public:
    1.46 +  virtual void do_oop(oop* p)       { TraversePlaceholdersClosure::do_oop_work(p); }
    1.47 +  virtual void do_oop(narrowOop* p) { TraversePlaceholdersClosure::do_oop_work(p); }
    1.48 +
    1.49  };
    1.50  
    1.51  

mercurial