51 oop_oop_iterate_statics_specialized<nv, oop>(obj, closure); |
51 oop_oop_iterate_statics_specialized<nv, oop>(obj, closure); |
52 } |
52 } |
53 } |
53 } |
54 |
54 |
55 template <bool nv, class OopClosureType> |
55 template <bool nv, class OopClosureType> |
56 int InstanceMirrorKlass::oop_oop_iterate(oop obj, OopClosureType* closure) { |
56 void InstanceMirrorKlass::oop_oop_iterate(oop obj, OopClosureType* closure) { |
57 InstanceKlass::oop_oop_iterate<nv>(obj, closure); |
57 InstanceKlass::oop_oop_iterate<nv>(obj, closure); |
58 |
58 |
59 if (Devirtualizer<nv>::do_metadata(closure)) { |
59 if (Devirtualizer<nv>::do_metadata(closure)) { |
60 Klass* klass = java_lang_Class::as_Klass(obj); |
60 Klass* klass = java_lang_Class::as_Klass(obj); |
61 // We'll get NULL for primitive mirrors. |
61 // We'll get NULL for primitive mirrors. |
62 if (klass != NULL) { |
62 if (klass != NULL) { |
63 Devirtualizer<nv>::do_klass(closure, klass); |
63 if (klass->oop_is_instance() && InstanceKlass::cast(klass)->is_anonymous()) { |
|
64 // An anonymous class doesn't have its own class loader, so when handling |
|
65 // the java mirror for an anonymous class we need to make sure its class |
|
66 // loader data is claimed, this is done by calling do_cld explicitly. |
|
67 // For non-anonymous classes the call to do_cld is made when the class |
|
68 // loader itself is handled. |
|
69 Devirtualizer<nv>::do_cld(closure, klass->class_loader_data()); |
|
70 } else { |
|
71 Devirtualizer<nv>::do_klass(closure, klass); |
|
72 } |
|
73 } else { |
|
74 // If klass is NULL then this a mirror for a primitive type. |
|
75 // We don't have to follow them, since they are handled as strong |
|
76 // roots in Universe::oops_do. |
|
77 assert(java_lang_Class::is_primitive(obj), "Sanity check"); |
64 } |
78 } |
65 } |
79 } |
66 |
80 |
67 oop_oop_iterate_statics<nv>(obj, closure); |
81 oop_oop_iterate_statics<nv>(obj, closure); |
68 |
|
69 return oop_size(obj); |
|
70 } |
82 } |
71 |
83 |
72 #if INCLUDE_ALL_GCS |
84 #if INCLUDE_ALL_GCS |
73 template <bool nv, class OopClosureType> |
85 template <bool nv, class OopClosureType> |
74 int InstanceMirrorKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) { |
86 void InstanceMirrorKlass::oop_oop_iterate_reverse(oop obj, OopClosureType* closure) { |
75 InstanceKlass::oop_oop_iterate_reverse<nv>(obj, closure); |
87 InstanceKlass::oop_oop_iterate_reverse<nv>(obj, closure); |
76 |
88 |
77 InstanceMirrorKlass::oop_oop_iterate_statics<nv>(obj, closure); |
89 InstanceMirrorKlass::oop_oop_iterate_statics<nv>(obj, closure); |
78 |
|
79 return oop_size(obj); |
|
80 } |
90 } |
81 #endif |
91 #endif |
82 |
92 |
83 template <bool nv, typename T, class OopClosureType> |
93 template <bool nv, typename T, class OopClosureType> |
84 void InstanceMirrorKlass::oop_oop_iterate_statics_specialized_bounded(oop obj, |
94 void InstanceMirrorKlass::oop_oop_iterate_statics_specialized_bounded(oop obj, |
113 oop_oop_iterate_statics_specialized_bounded<nv, oop>(obj, closure, mr); |
123 oop_oop_iterate_statics_specialized_bounded<nv, oop>(obj, closure, mr); |
114 } |
124 } |
115 } |
125 } |
116 |
126 |
117 template <bool nv, class OopClosureType> |
127 template <bool nv, class OopClosureType> |
118 int InstanceMirrorKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) { |
128 void InstanceMirrorKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) { |
119 InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr); |
129 InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr); |
120 |
130 |
121 if (Devirtualizer<nv>::do_metadata(closure)) { |
131 if (Devirtualizer<nv>::do_metadata(closure)) { |
122 if (mr.contains(obj)) { |
132 if (mr.contains(obj)) { |
123 Klass* klass = java_lang_Class::as_Klass(obj); |
133 Klass* klass = java_lang_Class::as_Klass(obj); |
127 } |
137 } |
128 } |
138 } |
129 } |
139 } |
130 |
140 |
131 oop_oop_iterate_statics_bounded<nv>(obj, closure, mr); |
141 oop_oop_iterate_statics_bounded<nv>(obj, closure, mr); |
132 |
|
133 return oop_size(obj); |
|
134 } |
142 } |
135 |
143 |
136 #define ALL_INSTANCE_MIRROR_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ |
144 #define ALL_INSTANCE_MIRROR_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ |
137 OOP_OOP_ITERATE_DEFN( InstanceMirrorKlass, OopClosureType, nv_suffix) \ |
145 OOP_OOP_ITERATE_DEFN( InstanceMirrorKlass, OopClosureType, nv_suffix) \ |
138 OOP_OOP_ITERATE_DEFN_BOUNDED( InstanceMirrorKlass, OopClosureType, nv_suffix) \ |
146 OOP_OOP_ITERATE_DEFN_BOUNDED( InstanceMirrorKlass, OopClosureType, nv_suffix) \ |