@@ -47,32 +47,9 @@ void InstanceMirrorKlass::oop_oop_iterate_statics(oop obj, OopClosureType* closu
47
47
}
48
48
49
49
template <typename T, class OopClosureType >
50
- void InstanceMirrorKlass::oop_oop_iterate_statics_bounded (oop obj,
51
- OopClosureType* closure,
52
- MemRegion mr) {
53
- T* p = (T*)start_of_static_fields (obj);
54
- T* end = p + java_lang_Class::static_oop_field_count (obj);
55
-
56
- T* const l = (T*)mr.start ();
57
- T* const h = (T*)mr.end ();
58
- assert (mask_bits ((intptr_t )l, sizeof (T)-1 ) == 0 &&
59
- mask_bits ((intptr_t )h, sizeof (T)-1 ) == 0 ,
60
- " bounded region must be properly aligned" );
61
-
62
- if (p < l) {
63
- p = l;
64
- }
65
- if (end > h) {
66
- end = h;
67
- }
68
-
69
- for (;p < end; ++p) {
70
- Devirtualizer::do_oop (closure, p);
71
- }
72
- }
50
+ void InstanceMirrorKlass::oop_oop_iterate (oop obj, OopClosureType* closure, KlassLUTEntry klute) {
51
+ InstanceKlass::oop_oop_iterate<T>(obj, closure, klute);
73
52
74
- template <typename T, class OopClosureType >
75
- void InstanceMirrorKlass::oop_oop_iterate_metadata (oop obj, OopClosureType* closure) {
76
53
if (Devirtualizer::do_metadata (closure)) {
77
54
Klass* klass = java_lang_Class::as_Klass (obj);
78
55
// We'll get null for primitive mirrors.
@@ -102,41 +79,60 @@ void InstanceMirrorKlass::oop_oop_iterate_metadata(oop obj, OopClosureType* clos
102
79
// assert(java_lang_Class::is_primitive(obj), "Sanity check");
103
80
}
104
81
}
105
- }
106
82
107
- template <typename T, class OopClosureType >
108
- void InstanceMirrorKlass::oop_oop_iterate_metadata_bounded (oop obj, OopClosureType* closure, MemRegion mr) {
109
- if (Devirtualizer::do_metadata (closure)) {
110
- if (mr.contains (obj)) {
111
- Klass* klass = java_lang_Class::as_Klass (obj);
112
- // We'll get null for primitive mirrors.
113
- if (klass != nullptr ) {
114
- Devirtualizer::do_klass (closure, klass);
115
- }
116
- }
117
- }
83
+ InstanceMirrorKlass* const ik = obj->klass ()->as_InstanceMirrorKlass ();
84
+ ik->oop_oop_iterate_statics <T>(obj, closure);
118
85
}
119
86
120
87
template <typename T, class OopClosureType >
121
- void InstanceMirrorKlass::oop_oop_iterate (oop obj, OopClosureType* closure, KlassLUTEntry klute) {
122
- InstanceKlass::oop_oop_iterate<T>(obj, closure, klute);
123
- oop_oop_iterate_metadata<T>(obj, closure);
124
- oop_oop_iterate_statics<T>(obj, closure);
88
+ void InstanceMirrorKlass::oop_oop_iterate_reverse (oop obj, OopClosureType* closure, KlassLUTEntry klute) {
89
+ InstanceKlass::oop_oop_iterate_reverse<T>(obj, closure, klute);
125
90
91
+ InstanceMirrorKlass* const ik = obj->klass ()->as_InstanceMirrorKlass ();
92
+ ik->oop_oop_iterate_statics <T>(obj, closure);
126
93
}
127
94
128
95
template <typename T, class OopClosureType >
129
- void InstanceMirrorKlass::oop_oop_iterate_reverse (oop obj, OopClosureType* closure, KlassLUTEntry klute) {
130
- InstanceKlass::oop_oop_iterate_reverse<T>(obj, closure, klute);
96
+ void InstanceMirrorKlass::oop_oop_iterate_statics_bounded (oop obj,
97
+ OopClosureType* closure,
98
+ MemRegion mr) {
99
+ T* p = (T*)start_of_static_fields (obj);
100
+ T* end = p + java_lang_Class::static_oop_field_count (obj);
131
101
132
- InstanceMirrorKlass::oop_oop_iterate_statics<T>(obj, closure);
133
- }
102
+ T* const l = (T*)mr.start ();
103
+ T* const h = (T*)mr.end ();
104
+ assert (mask_bits ((intptr_t )l, sizeof (T)-1 ) == 0 &&
105
+ mask_bits ((intptr_t )h, sizeof (T)-1 ) == 0 ,
106
+ " bounded region must be properly aligned" );
107
+
108
+ if (p < l) {
109
+ p = l;
110
+ }
111
+ if (end > h) {
112
+ end = h;
113
+ }
134
114
115
+ for (;p < end; ++p) {
116
+ Devirtualizer::do_oop (closure, p);
117
+ }
118
+ }
135
119
136
120
template <typename T, class OopClosureType >
137
121
void InstanceMirrorKlass::oop_oop_iterate_bounded (oop obj, OopClosureType* closure, MemRegion mr, KlassLUTEntry klute) {
138
122
InstanceKlass::oop_oop_iterate_bounded<T>(obj, closure, mr, klute);
139
- oop_oop_iterate_metadata_bounded<T>(obj, closure, mr);
140
- oop_oop_iterate_statics_bounded<T>(obj, closure, mr);
123
+
124
+ if (Devirtualizer::do_metadata (closure)) {
125
+ if (mr.contains (obj)) {
126
+ Klass* klass = java_lang_Class::as_Klass (obj);
127
+ // We'll get null for primitive mirrors.
128
+ if (klass != nullptr ) {
129
+ Devirtualizer::do_klass (closure, klass);
130
+ }
131
+ }
132
+ }
133
+
134
+ InstanceMirrorKlass* const ik = obj->klass ()->as_InstanceMirrorKlass ();
135
+ ik->oop_oop_iterate_statics_bounded <T>(obj, closure, mr);
141
136
}
137
+
142
138
#endif // SHARE_OOPS_INSTANCEMIRRORKLASS_INLINE_HPP
0 commit comments