67 // Add all classes to our internal class loader list here,
68 // including classes in the bootstrap (NULL) class loader.
69 // GC walks these as strong roots.
70 null_loader_data->add_class(ak);
71
72 // Call complete_create_array_klass after all instance variables have been initialized.
73 complete_create_array_klass(ak, ak->super(), CHECK_NULL);
74
75 return ak;
76 }
77
78 TypeArrayKlass* TypeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) {
79 assert(TypeArrayKlass::header_size() <= InstanceKlass::header_size(),
80 "array klasses must be same size as InstanceKlass");
81
82 int size = ArrayKlass::static_size(TypeArrayKlass::header_size());
83
84 return new (loader_data, size, THREAD) TypeArrayKlass(type, name);
85 }
86
87 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name) {
88 set_layout_helper(array_layout_helper(type));
89 assert(oop_is_array(), "sanity");
90 assert(oop_is_typeArray(), "sanity");
91
92 set_max_length(arrayOopDesc::max_array_length(type));
93 assert(size() >= TypeArrayKlass::header_size(), "bad size");
94
95 set_class_loader_data(ClassLoaderData::the_null_class_loader_data());
96 }
97
98 typeArrayOop TypeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) {
99 assert(log2_element_size() >= 0, "bad scale");
100 if (length >= 0) {
101 if (length <= max_length()) {
102 size_t size = typeArrayOopDesc::object_size(layout_helper(), length);
103 KlassHandle h_k(THREAD, this);
104 typeArrayOop t;
105 CollectedHeap* ch = Universe::heap();
106 if (do_zero) {
107 t = (typeArrayOop)CollectedHeap::array_allocate(h_k, (int)size, length, CHECK_NULL);
202 assert(obj->is_typeArray(),"must be a type array");
203 typeArrayOop t = typeArrayOop(obj);
204 return t->object_size();
205 }
206
207 void TypeArrayKlass::oop_follow_contents(oop obj) {
208 assert(obj->is_typeArray(),"must be a type array");
209 // Performance tweak: We skip iterating over the klass pointer since we
210 // know that Universe::TypeArrayKlass never moves.
211 }
212
213 #if INCLUDE_ALL_GCS
214 void TypeArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) {
215 assert(obj->is_typeArray(),"must be a type array");
216 // Performance tweak: We skip iterating over the klass pointer since we
217 // know that Universe::TypeArrayKlass never moves.
218 }
219 #endif // INCLUDE_ALL_GCS
220
221 int TypeArrayKlass::oop_adjust_pointers(oop obj) {
222 assert(obj->is_typeArray(),"must be a type array");
223 typeArrayOop t = typeArrayOop(obj);
224 // Performance tweak: We skip iterating over the klass pointer since we
225 // know that Universe::TypeArrayKlass never moves.
226 return t->object_size();
227 }
228
229 int TypeArrayKlass::oop_oop_iterate(oop obj, ExtendedOopClosure* blk) {
230 assert(obj->is_typeArray(),"must be a type array");
231 typeArrayOop t = typeArrayOop(obj);
232 // Performance tweak: We skip iterating over the klass pointer since we
233 // know that Universe::TypeArrayKlass never moves.
234 return t->object_size();
235 }
236
237 int TypeArrayKlass::oop_oop_iterate_m(oop obj, ExtendedOopClosure* blk, MemRegion mr) {
238 assert(obj->is_typeArray(),"must be a type array");
239 typeArrayOop t = typeArrayOop(obj);
240 // Performance tweak: We skip iterating over the klass pointer since we
241 // know that Universe::TypeArrayKlass never moves.
242 return t->object_size();
243 }
244
245 #if INCLUDE_ALL_GCS
246 void TypeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
247 ShouldNotReachHere();
248 assert(obj->is_typeArray(),"must be a type array");
249 }
250
251 int
252 TypeArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
253 assert(obj->is_typeArray(),"must be a type array");
254 return typeArrayOop(obj)->object_size();
255 }
256 #endif // INCLUDE_ALL_GCS
257
|
67 // Add all classes to our internal class loader list here,
68 // including classes in the bootstrap (NULL) class loader.
69 // GC walks these as strong roots.
70 null_loader_data->add_class(ak);
71
72 // Call complete_create_array_klass after all instance variables have been initialized.
73 complete_create_array_klass(ak, ak->super(), CHECK_NULL);
74
75 return ak;
76 }
77
78 TypeArrayKlass* TypeArrayKlass::allocate(ClassLoaderData* loader_data, BasicType type, Symbol* name, TRAPS) {
79 assert(TypeArrayKlass::header_size() <= InstanceKlass::header_size(),
80 "array klasses must be same size as InstanceKlass");
81
82 int size = ArrayKlass::static_size(TypeArrayKlass::header_size());
83
84 return new (loader_data, size, THREAD) TypeArrayKlass(type, name);
85 }
86
87 TypeArrayKlass::TypeArrayKlass(BasicType type, Symbol* name) : ArrayKlass(name, _type_array) {
88 set_layout_helper(array_layout_helper(type));
89 assert(oop_is_array(), "sanity");
90 assert(oop_is_typeArray(), "sanity");
91
92 set_max_length(arrayOopDesc::max_array_length(type));
93 assert(size() >= TypeArrayKlass::header_size(), "bad size");
94
95 set_class_loader_data(ClassLoaderData::the_null_class_loader_data());
96 }
97
98 typeArrayOop TypeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) {
99 assert(log2_element_size() >= 0, "bad scale");
100 if (length >= 0) {
101 if (length <= max_length()) {
102 size_t size = typeArrayOopDesc::object_size(layout_helper(), length);
103 KlassHandle h_k(THREAD, this);
104 typeArrayOop t;
105 CollectedHeap* ch = Universe::heap();
106 if (do_zero) {
107 t = (typeArrayOop)CollectedHeap::array_allocate(h_k, (int)size, length, CHECK_NULL);
202 assert(obj->is_typeArray(),"must be a type array");
203 typeArrayOop t = typeArrayOop(obj);
204 return t->object_size();
205 }
206
207 void TypeArrayKlass::oop_follow_contents(oop obj) {
208 assert(obj->is_typeArray(),"must be a type array");
209 // Performance tweak: We skip iterating over the klass pointer since we
210 // know that Universe::TypeArrayKlass never moves.
211 }
212
213 #if INCLUDE_ALL_GCS
214 void TypeArrayKlass::oop_follow_contents(ParCompactionManager* cm, oop obj) {
215 assert(obj->is_typeArray(),"must be a type array");
216 // Performance tweak: We skip iterating over the klass pointer since we
217 // know that Universe::TypeArrayKlass never moves.
218 }
219 #endif // INCLUDE_ALL_GCS
220
221 int TypeArrayKlass::oop_adjust_pointers(oop obj) {
222 assert(obj->is_typeArray(),"must be a type array");
223 typeArrayOop t = typeArrayOop(obj);
224 // Performance tweak: We skip iterating over the klass pointer since we
225 // know that Universe::TypeArrayKlass never moves.
226 return t->object_size();
227 }
228
229 #if INCLUDE_ALL_GCS
230 void TypeArrayKlass::oop_push_contents(PSPromotionManager* pm, oop obj) {
231 ShouldNotReachHere();
232 assert(obj->is_typeArray(),"must be a type array");
233 }
234
235 int
236 TypeArrayKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) {
237 assert(obj->is_typeArray(),"must be a type array");
238 return typeArrayOop(obj)->object_size();
239 }
240 #endif // INCLUDE_ALL_GCS
241
|