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 |