< prev index next >

src/hotspot/share/gc/cms/cmsOopClosures.inline.hpp

CLD claiming v2

CLD claiming

23 
24 #ifndef SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP                                                                                    
25 #define SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP                                                                                    
26 
27 #include "gc/cms/cmsOopClosures.hpp"                                                                                                 
28 #include "gc/cms/concurrentMarkSweepGeneration.hpp"                                                                                  
29 #include "gc/shared/taskqueue.inline.hpp"                                                                                            
30 #include "oops/access.inline.hpp"                                                                                                    
31 #include "oops/compressedOops.inline.hpp"                                                                                            
32 #include "oops/oop.inline.hpp"                                                                                                       
33 
34 // MetadataVisitingOopIterateClosure and MetadataVisitingOopsInGenClosure are duplicated,                                            
35 // until we get rid of OopsInGenClosure.                                                                                             
36 
37 inline void MetadataVisitingOopsInGenClosure::do_klass(Klass* k) {                                                                   
38   ClassLoaderData* cld = k->class_loader_data();                                                                                     
39   MetadataVisitingOopsInGenClosure::do_cld(cld);                                                                                     
40 }                                                                                                                                    
41 
42 inline void MetadataVisitingOopsInGenClosure::do_cld(ClassLoaderData* cld) {                                                         
43   bool claim = true;  // Must claim the class loader data before processing.                                                         
44   cld->oops_do(this, claim);                                                                                                         
45 }                                                                                                                                    
46 
47 // Decode the oop and call do_oop on it.                                                                                             
48 #define DO_OOP_WORK_IMPL(cls)                                \                                                                       
49   template <class T> void cls::do_oop_work(T* p) {           \                                                                       
50     T heap_oop = RawAccess<>::oop_load(p);                   \                                                                       
51     if (!CompressedOops::is_null(heap_oop)) {                \                                                                       
52       oop obj = CompressedOops::decode_not_null(heap_oop);   \                                                                       
53       do_oop(obj);                                           \                                                                       
54     }                                                        \                                                                       
55   }                                                          \                                                                       
56   inline void cls::do_oop(oop* p)       { do_oop_work(p); }  \                                                                       
57   inline void cls::do_oop(narrowOop* p) { do_oop_work(p); }                                                                          
58 
59 DO_OOP_WORK_IMPL(MarkRefsIntoClosure)                                                                                                
60 DO_OOP_WORK_IMPL(ParMarkRefsIntoClosure)                                                                                             
61 DO_OOP_WORK_IMPL(MarkRefsIntoVerifyClosure)                                                                                          
62 DO_OOP_WORK_IMPL(PushAndMarkClosure)                                                                                                 
63 DO_OOP_WORK_IMPL(ParPushAndMarkClosure)                                                                                              

23 
24 #ifndef SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP
25 #define SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP
26 
27 #include "gc/cms/cmsOopClosures.hpp"
28 #include "gc/cms/concurrentMarkSweepGeneration.hpp"
29 #include "gc/shared/taskqueue.inline.hpp"
30 #include "oops/access.inline.hpp"
31 #include "oops/compressedOops.inline.hpp"
32 #include "oops/oop.inline.hpp"
33 
34 // MetadataVisitingOopIterateClosure and MetadataVisitingOopsInGenClosure are duplicated,
35 // until we get rid of OopsInGenClosure.
36 
37 inline void MetadataVisitingOopsInGenClosure::do_klass(Klass* k) {
38   ClassLoaderData* cld = k->class_loader_data();
39   MetadataVisitingOopsInGenClosure::do_cld(cld);
40 }
41 
42 inline void MetadataVisitingOopsInGenClosure::do_cld(ClassLoaderData* cld) {
43   cld->oops_do(this, ClassLoaderData::_claim_strong);

44 }
45 
46 // Decode the oop and call do_oop on it.
47 #define DO_OOP_WORK_IMPL(cls)                                \
48   template <class T> void cls::do_oop_work(T* p) {           \
49     T heap_oop = RawAccess<>::oop_load(p);                   \
50     if (!CompressedOops::is_null(heap_oop)) {                \
51       oop obj = CompressedOops::decode_not_null(heap_oop);   \
52       do_oop(obj);                                           \
53     }                                                        \
54   }                                                          \
55   inline void cls::do_oop(oop* p)       { do_oop_work(p); }  \
56   inline void cls::do_oop(narrowOop* p) { do_oop_work(p); }
57 
58 DO_OOP_WORK_IMPL(MarkRefsIntoClosure)
59 DO_OOP_WORK_IMPL(ParMarkRefsIntoClosure)
60 DO_OOP_WORK_IMPL(MarkRefsIntoVerifyClosure)
61 DO_OOP_WORK_IMPL(PushAndMarkClosure)
62 DO_OOP_WORK_IMPL(ParPushAndMarkClosure)
< prev index next >