src/hotspot/share/gc/cms/cmsOopClosures.inline.hpp
changeset 50752 9d62da00bf15
parent 49592 77fb0be7d19f
child 52141 de6dc206a92b
equal deleted inserted replaced
50751:d9132bdf6c30 50752:9d62da00bf15
    30 #include "gc/shared/taskqueue.inline.hpp"
    30 #include "gc/shared/taskqueue.inline.hpp"
    31 #include "oops/access.inline.hpp"
    31 #include "oops/access.inline.hpp"
    32 #include "oops/compressedOops.inline.hpp"
    32 #include "oops/compressedOops.inline.hpp"
    33 #include "oops/oop.inline.hpp"
    33 #include "oops/oop.inline.hpp"
    34 
    34 
    35 // MetadataAwareOopClosure and MetadataAwareOopsInGenClosure are duplicated,
    35 // MetadataVisitingOopIterateClosure and MetadataVisitingOopsInGenClosure are duplicated,
    36 // until we get rid of OopsInGenClosure.
    36 // until we get rid of OopsInGenClosure.
    37 
    37 
    38 inline void MetadataAwareOopsInGenClosure::do_klass_nv(Klass* k) {
    38 inline void MetadataVisitingOopsInGenClosure::do_klass(Klass* k) {
    39   ClassLoaderData* cld = k->class_loader_data();
    39   ClassLoaderData* cld = k->class_loader_data();
    40   do_cld_nv(cld);
    40   MetadataVisitingOopsInGenClosure::do_cld(cld);
    41 }
    41 }
    42 inline void MetadataAwareOopsInGenClosure::do_klass(Klass* k) { do_klass_nv(k); }
       
    43 
    42 
    44 inline void MetadataAwareOopsInGenClosure::do_cld_nv(ClassLoaderData* cld) {
    43 inline void MetadataVisitingOopsInGenClosure::do_cld(ClassLoaderData* cld) {
    45   bool claim = true;  // Must claim the class loader data before processing.
    44   bool claim = true;  // Must claim the class loader data before processing.
    46   cld->oops_do(this, claim);
    45   cld->oops_do(this, claim);
    47 }
    46 }
    48 
    47 
    49 // Decode the oop and call do_oop on it.
    48 // Decode the oop and call do_oop on it.
    50 #define DO_OOP_WORK_IMPL(cls)                               \
    49 #define DO_OOP_WORK_IMPL(cls)                                \
    51   template <class T> void cls::do_oop_work(T* p) {          \
    50   template <class T> void cls::do_oop_work(T* p) {           \
    52     T heap_oop = RawAccess<>::oop_load(p);                  \
    51     T heap_oop = RawAccess<>::oop_load(p);                   \
    53     if (!CompressedOops::is_null(heap_oop)) {               \
    52     if (!CompressedOops::is_null(heap_oop)) {                \
    54       oop obj = CompressedOops::decode_not_null(heap_oop);  \
    53       oop obj = CompressedOops::decode_not_null(heap_oop);   \
    55       do_oop(obj);                                          \
    54       do_oop(obj);                                           \
    56     }                                                       \
    55     }                                                        \
    57   }
    56   }                                                          \
    58 
    57   inline void cls::do_oop(oop* p)       { do_oop_work(p); }  \
    59 #define DO_OOP_WORK_NV_IMPL(cls)                              \
    58   inline void cls::do_oop(narrowOop* p) { do_oop_work(p); }
    60   DO_OOP_WORK_IMPL(cls)                                       \
       
    61   void cls::do_oop_nv(oop* p)       { cls::do_oop_work(p); }  \
       
    62   void cls::do_oop_nv(narrowOop* p) { cls::do_oop_work(p); }
       
    63 
    59 
    64 DO_OOP_WORK_IMPL(MarkRefsIntoClosure)
    60 DO_OOP_WORK_IMPL(MarkRefsIntoClosure)
    65 DO_OOP_WORK_IMPL(ParMarkRefsIntoClosure)
    61 DO_OOP_WORK_IMPL(ParMarkRefsIntoClosure)
    66 DO_OOP_WORK_IMPL(MarkRefsIntoVerifyClosure)
    62 DO_OOP_WORK_IMPL(MarkRefsIntoVerifyClosure)
    67 DO_OOP_WORK_NV_IMPL(PushAndMarkClosure)
    63 DO_OOP_WORK_IMPL(PushAndMarkClosure)
    68 DO_OOP_WORK_NV_IMPL(ParPushAndMarkClosure)
    64 DO_OOP_WORK_IMPL(ParPushAndMarkClosure)
    69 DO_OOP_WORK_NV_IMPL(MarkRefsIntoAndScanClosure)
    65 DO_OOP_WORK_IMPL(MarkRefsIntoAndScanClosure)
    70 DO_OOP_WORK_NV_IMPL(ParMarkRefsIntoAndScanClosure)
    66 DO_OOP_WORK_IMPL(ParMarkRefsIntoAndScanClosure)
    71 
    67 
    72 // Trim our work_queue so its length is below max at return
    68 // Trim our work_queue so its length is below max at return
    73 inline void ParMarkRefsIntoAndScanClosure::trim_queue(uint max) {
    69 inline void ParMarkRefsIntoAndScanClosure::trim_queue(uint max) {
    74   while (_work_queue->size() > max) {
    70   while (_work_queue->size() > max) {
    75     oop newOop;
    71     oop newOop;
    82       newOop->oop_iterate(&_parPushAndMarkClosure);
    78       newOop->oop_iterate(&_parPushAndMarkClosure);
    83     }
    79     }
    84   }
    80   }
    85 }
    81 }
    86 
    82 
    87 DO_OOP_WORK_NV_IMPL(PushOrMarkClosure)
    83 DO_OOP_WORK_IMPL(PushOrMarkClosure)
    88 DO_OOP_WORK_NV_IMPL(ParPushOrMarkClosure)
    84 DO_OOP_WORK_IMPL(ParPushOrMarkClosure)
    89 DO_OOP_WORK_NV_IMPL(CMSKeepAliveClosure)
    85 DO_OOP_WORK_IMPL(CMSKeepAliveClosure)
    90 DO_OOP_WORK_NV_IMPL(CMSInnerParMarkAndPushClosure)
    86 DO_OOP_WORK_IMPL(CMSInnerParMarkAndPushClosure)
    91 DO_OOP_WORK_IMPL(CMSParKeepAliveClosure)
    87 DO_OOP_WORK_IMPL(CMSParKeepAliveClosure)
    92 
    88 
    93 #endif // SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP
    89 #endif // SHARE_VM_GC_CMS_CMSOOPCLOSURES_INLINE_HPP