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)
|