37 #include "oops/objArrayKlass.hpp" |
37 #include "oops/objArrayKlass.hpp" |
38 #include "oops/oop.inline.hpp" |
38 #include "oops/oop.inline.hpp" |
39 #include "oops/typeArrayKlass.hpp" |
39 #include "oops/typeArrayKlass.hpp" |
40 #include "oops/typeArrayOop.hpp" |
40 #include "oops/typeArrayOop.hpp" |
41 #include "runtime/handles.inline.hpp" |
41 #include "runtime/handles.inline.hpp" |
|
42 #include "utilities/macros.hpp" |
42 |
43 |
43 bool TypeArrayKlass::compute_is_subtype_of(Klass* k) { |
44 bool TypeArrayKlass::compute_is_subtype_of(Klass* k) { |
44 if (!k->oop_is_typeArray()) { |
45 if (!k->oop_is_typeArray()) { |
45 return ArrayKlass::compute_is_subtype_of(k); |
46 return ArrayKlass::compute_is_subtype_of(k); |
46 } |
47 } |
206 assert(obj->is_typeArray(),"must be a type array"); |
207 assert(obj->is_typeArray(),"must be a type array"); |
207 // Performance tweak: We skip iterating over the klass pointer since we |
208 // Performance tweak: We skip iterating over the klass pointer since we |
208 // know that Universe::TypeArrayKlass never moves. |
209 // know that Universe::TypeArrayKlass never moves. |
209 } |
210 } |
210 |
211 |
211 #ifndef SERIALGC |
212 #if INCLUDE_ALL_GCS |
212 void TypeArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { |
213 void TypeArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) { |
213 assert(obj->is_typeArray(),"must be a type array"); |
214 assert(obj->is_typeArray(),"must be a type array"); |
214 // Performance tweak: We skip iterating over the klass pointer since we |
215 // Performance tweak: We skip iterating over the klass pointer since we |
215 // know that Universe::TypeArrayKlass never moves. |
216 // know that Universe::TypeArrayKlass never moves. |
216 } |
217 } |
217 #endif // SERIALGC |
218 #endif // INCLUDE_ALL_GCS |
218 |
219 |
219 int TypeArrayKlass::oop_adjust_pointers(oop obj) { |
220 int TypeArrayKlass::oop_adjust_pointers(oop obj) { |
220 assert(obj->is_typeArray(),"must be a type array"); |
221 assert(obj->is_typeArray(),"must be a type array"); |
221 typeArrayOop t = typeArrayOop(obj); |
222 typeArrayOop t = typeArrayOop(obj); |
222 // Performance tweak: We skip iterating over the klass pointer since we |
223 // Performance tweak: We skip iterating over the klass pointer since we |
238 // Performance tweak: We skip iterating over the klass pointer since we |
239 // Performance tweak: We skip iterating over the klass pointer since we |
239 // know that Universe::TypeArrayKlass never moves. |
240 // know that Universe::TypeArrayKlass never moves. |
240 return t->object_size(); |
241 return t->object_size(); |
241 } |
242 } |
242 |
243 |
243 #ifndef SERIALGC |
244 #if INCLUDE_ALL_GCS |
244 void TypeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
245 void TypeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
245 ShouldNotReachHere(); |
246 ShouldNotReachHere(); |
246 assert(obj->is_typeArray(),"must be a type array"); |
247 assert(obj->is_typeArray(),"must be a type array"); |
247 } |
248 } |
248 |
249 |
249 int |
250 int |
250 TypeArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
251 TypeArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { |
251 assert(obj->is_typeArray(),"must be a type array"); |
252 assert(obj->is_typeArray(),"must be a type array"); |
252 return typeArrayOop(obj)->object_size(); |
253 return typeArrayOop(obj)->object_size(); |
253 } |
254 } |
254 #endif // SERIALGC |
255 #endif // INCLUDE_ALL_GCS |
255 |
256 |
256 void TypeArrayKlass::initialize(TRAPS) { |
257 void TypeArrayKlass::initialize(TRAPS) { |
257 // Nothing to do. Having this function is handy since objArrayKlasses can be |
258 // Nothing to do. Having this function is handy since objArrayKlasses can be |
258 // initialized by calling initialize on their bottom_klass, see ObjArrayKlass::initialize |
259 // initialized by calling initialize on their bottom_klass, see ObjArrayKlass::initialize |
259 } |
260 } |