< prev index next >

src/share/vm/gc_implementation/g1/g1OopClosures.hpp

Print this page
rev 7171 : 8060025: Object copy time regressions after JDK-8031323 and JDK-8057536
Summary: Evaluate and improve object copy time by micro-optimizations and splitting out slow and fast paths aggressively.
Reviewed-by: kbarrett, mgerdin, jmasa
Contributed-by: Tony Printezis <tprintezis@twitter.com>, Thomas Schatzl <thomas.schatzl@oracle.com>
rev 7178 : 8067655: Clean up G1 remembered set oop iteration
Summary: Pass on the static type G1ParPushHeapRSClosure to allow oop_iterate devirtualization
Reviewed-by: jmasa, kbarrett


 223   virtual void do_oop(narrowOop* p)  { do_oop_nv(p); }
 224 };
 225 
 226 // A closure which uses a triggering closure to determine
 227 // whether to apply an oop closure.
 228 
 229 class G1InvokeIfNotTriggeredClosure: public ExtendedOopClosure {
 230   G1TriggerClosure* _trigger_cl;
 231   OopClosure* _oop_cl;
 232 public:
 233   G1InvokeIfNotTriggeredClosure(G1TriggerClosure* t, OopClosure* oc);
 234   template <class T> void do_oop_nv(T* p);
 235   virtual void do_oop(oop* p)        { do_oop_nv(p); }
 236   virtual void do_oop(narrowOop* p)  { do_oop_nv(p); }
 237 };
 238 
 239 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
 240   G1CollectedHeap* _g1;
 241   G1RemSet* _g1_rem_set;
 242   HeapRegion* _from;
 243   OopsInHeapRegionClosure* _push_ref_cl;
 244   bool _record_refs_into_cset;
 245   uint _worker_i;
 246 
 247 public:
 248   G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
 249                                 G1RemSet* rs,
 250                                 OopsInHeapRegionClosure* push_ref_cl,
 251                                 bool record_refs_into_cset,
 252                                 uint worker_i = 0);
 253 
 254   void set_from(HeapRegion* from) {
 255     assert(from != NULL, "from region must be non-NULL");
 256     _from = from;
 257   }
 258 
 259   bool self_forwarded(oop obj) {
 260     markOop m = obj->mark();
 261     bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj));
 262     return result;
 263   }
 264 
 265   bool apply_to_weak_ref_discovered_field() { return true; }
 266 
 267   template <class T> void do_oop_nv(T* p);
 268   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
 269   virtual void do_oop(oop* p)       { do_oop_nv(p); }
 270 };


 223   virtual void do_oop(narrowOop* p)  { do_oop_nv(p); }
 224 };
 225 
 226 // A closure which uses a triggering closure to determine
 227 // whether to apply an oop closure.
 228 
 229 class G1InvokeIfNotTriggeredClosure: public ExtendedOopClosure {
 230   G1TriggerClosure* _trigger_cl;
 231   OopClosure* _oop_cl;
 232 public:
 233   G1InvokeIfNotTriggeredClosure(G1TriggerClosure* t, OopClosure* oc);
 234   template <class T> void do_oop_nv(T* p);
 235   virtual void do_oop(oop* p)        { do_oop_nv(p); }
 236   virtual void do_oop(narrowOop* p)  { do_oop_nv(p); }
 237 };
 238 
 239 class G1UpdateRSOrPushRefOopClosure: public ExtendedOopClosure {
 240   G1CollectedHeap* _g1;
 241   G1RemSet* _g1_rem_set;
 242   HeapRegion* _from;
 243   G1ParPushHeapRSClosure* _push_ref_cl;
 244   bool _record_refs_into_cset;
 245   uint _worker_i;
 246 
 247 public:
 248   G1UpdateRSOrPushRefOopClosure(G1CollectedHeap* g1h,
 249                                 G1RemSet* rs,
 250                                 G1ParPushHeapRSClosure* push_ref_cl,
 251                                 bool record_refs_into_cset,
 252                                 uint worker_i = 0);
 253 
 254   void set_from(HeapRegion* from) {
 255     assert(from != NULL, "from region must be non-NULL");
 256     _from = from;
 257   }
 258 
 259   bool self_forwarded(oop obj) {
 260     markOop m = obj->mark();
 261     bool result = (m->is_marked() && ((oop)m->decode_pointer() == obj));
 262     return result;
 263   }
 264 
 265   bool apply_to_weak_ref_discovered_field() { return true; }
 266 
 267   template <class T> void do_oop_nv(T* p);
 268   virtual void do_oop(narrowOop* p) { do_oop_nv(p); }
 269   virtual void do_oop(oop* p)       { do_oop_nv(p); }
 270 };
< prev index next >