46 public: |
46 public: |
47 virtual bool oop_is_instanceClassLoader() const { return true; } |
47 virtual bool oop_is_instanceClassLoader() const { return true; } |
48 |
48 |
49 InstanceClassLoaderKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } |
49 InstanceClassLoaderKlass() { assert(DumpSharedSpaces || UseSharedSpaces, "only for CDS"); } |
50 |
50 |
51 // Iterators |
51 // GC specific object visitors |
52 int oop_oop_iterate(oop obj, ExtendedOopClosure* blk) { |
52 // |
53 return oop_oop_iterate_v(obj, blk); |
53 // Mark Sweep |
54 } |
54 void oop_ms_follow_contents(oop obj); |
55 int oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) { |
55 int oop_ms_adjust_pointers(oop obj); |
56 return oop_oop_iterate_v_m(obj, blk, mr); |
56 #if INCLUDE_ALL_GCS |
57 } |
57 // Parallel Scavenge |
|
58 void oop_ps_push_contents( oop obj, PSPromotionManager* pm); |
|
59 // Parallel Compact |
|
60 void oop_pc_follow_contents(oop obj, ParCompactionManager* cm); |
|
61 void oop_pc_update_pointers(oop obj); |
|
62 #endif |
58 |
63 |
59 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
64 // Oop fields (and metadata) iterators |
60 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \ |
65 // [nv = true] Use non-virtual calls to do_oop_nv. |
|
66 // [nv = false] Use virtual calls to do_oop. |
|
67 // |
|
68 // The InstanceClassLoaderKlass iterators also visit the CLD pointer (or mirror of anonymous klasses.) |
|
69 |
|
70 private: |
|
71 // Forward iteration |
|
72 // Iterate over the oop fields and metadata. |
|
73 template <bool nv, class OopClosureType> |
|
74 inline int oop_oop_iterate(oop obj, OopClosureType* closure); |
|
75 |
|
76 #if INCLUDE_ALL_GCS |
|
77 // Reverse iteration |
|
78 // Iterate over the oop fields and metadata. |
|
79 template <bool nv, class OopClosureType> |
|
80 inline int oop_oop_iterate_reverse(oop obj, OopClosureType* closure); |
|
81 #endif |
|
82 |
|
83 // Bounded range iteration |
|
84 // Iterate over the oop fields and metadata. |
|
85 template <bool nv, class OopClosureType> |
|
86 inline int oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr); |
|
87 |
|
88 public: |
|
89 |
|
90 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
|
91 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk); \ |
61 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr); |
92 int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr); |
62 |
93 |
63 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL) |
94 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL) |
64 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL) |
95 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_DECL) |
65 |
96 |
66 #if INCLUDE_ALL_GCS |
97 #if INCLUDE_ALL_GCS |
67 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \ |
98 #define InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \ |
68 int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk); |
99 int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk); |
69 |
100 |
70 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) |
101 ALL_OOP_OOP_ITERATE_CLOSURES_1(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) |
71 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) |
102 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceClassLoaderKlass_OOP_OOP_ITERATE_BACKWARDS_DECL) |
72 #endif // INCLUDE_ALL_GCS |
103 #endif // INCLUDE_ALL_GCS |
73 |
104 |
74 // Garbage collection |
|
75 void oop_follow_contents(oop obj); |
|
76 |
|
77 // Parallel Scavenge and Parallel Old |
|
78 PARALLEL_GC_DECLS |
|
79 }; |
105 }; |
80 |
106 |
81 #endif // SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |
107 #endif // SHARE_VM_OOPS_INSTANCECLASSLOADERKLASS_HPP |