166 // If klass is NULL then this a mirror for a primitive type. 167 // We don't have to follow them, since they are handled as strong 168 // roots in Universe::oops_do. 169 assert(java_lang_Class::is_primitive(obj), "Sanity check"); 170 } 171 172 InstanceMirrorKlass_OOP_ITERATE( \ 173 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ 174 MarkSweep::mark_and_push(p), \ 175 assert_is_in_closed_subset) 176 } 177 178 #if INCLUDE_ALL_GCS 179 void InstanceMirrorKlass::oop_follow_contents(ParCompactionManager* cm, 180 oop obj) { 181 InstanceKlass::oop_follow_contents(cm, obj); 182 183 // Follow the klass field in the mirror. 184 Klass* klass = java_lang_Class::as_Klass(obj); 185 if (klass != NULL) { 186 PSParallelCompact::follow_klass(cm, klass); 187 } else { 188 // If klass is NULL then this a mirror for a primitive type. 189 // We don't have to follow them, since they are handled as strong 190 // roots in Universe::oops_do. 191 assert(java_lang_Class::is_primitive(obj), "Sanity check"); 192 } 193 194 InstanceMirrorKlass_OOP_ITERATE( \ 195 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ 196 PSParallelCompact::mark_and_push(cm, p), \ 197 assert_is_in) 198 } 199 #endif // INCLUDE_ALL_GCS 200 201 int InstanceMirrorKlass::oop_adjust_pointers(oop obj) { 202 int size = oop_size(obj); 203 InstanceKlass::oop_adjust_pointers(obj); 204 205 InstanceMirrorKlass_OOP_ITERATE( \ 206 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ 314 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceMirrorKlass_OOP_OOP_ITERATE_DEFN_m) 315 316 #if INCLUDE_ALL_GCS 317 void InstanceMirrorKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { 318 // Note that we don't have to follow the mirror -> klass pointer, since all 319 // klasses that are dirty will be scavenged when we iterate over the 320 // ClassLoaderData objects. 321 322 InstanceKlass::oop_push_contents(pm, obj); 323 InstanceMirrorKlass_OOP_ITERATE( \ 324 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),\ 325 if (PSScavenge::should_scavenge(p)) { \ 326 pm->claim_or_forward_depth(p); \ 327 }, \ 328 assert_nothing ) 329 } 330 331 int InstanceMirrorKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { 332 int size = oop_size(obj); 333 InstanceKlass::oop_update_pointers(cm, obj); 334 335 // Follow the klass field in the mirror. 336 Klass* klass = java_lang_Class::as_Klass(obj); 337 if (klass != NULL) { 338 PSParallelCompact::adjust_klass(cm, klass); 339 } else { 340 // If klass is NULL then this a mirror for a primitive type. 341 // We don't have to follow them, since they are handled as strong 342 // roots in Universe::oops_do. 343 assert(java_lang_Class::is_primitive(obj), "Sanity check"); 344 } 345 346 InstanceMirrorKlass_OOP_ITERATE( \ 347 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),\ 348 PSParallelCompact::adjust_pointer(p), \ 349 assert_nothing) 350 return size; 351 } 352 #endif // INCLUDE_ALL_GCS 353 354 int InstanceMirrorKlass::instance_size(KlassHandle k) { 355 if (k() != NULL && k->oop_is_instance()) { 356 return align_object_size(size_helper() + InstanceKlass::cast(k())->static_field_size()); 357 } 358 return size_helper(); 359 } 360 361 instanceOop InstanceMirrorKlass::allocate_instance(KlassHandle k, TRAPS) { 362 // Query before forming handle. 363 int size = instance_size(k); 364 KlassHandle h_k(THREAD, this); | 166 // If klass is NULL then this a mirror for a primitive type. 167 // We don't have to follow them, since they are handled as strong 168 // roots in Universe::oops_do. 169 assert(java_lang_Class::is_primitive(obj), "Sanity check"); 170 } 171 172 InstanceMirrorKlass_OOP_ITERATE( \ 173 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ 174 MarkSweep::mark_and_push(p), \ 175 assert_is_in_closed_subset) 176 } 177 178 #if INCLUDE_ALL_GCS 179 void InstanceMirrorKlass::oop_follow_contents(ParCompactionManager* cm, 180 oop obj) { 181 InstanceKlass::oop_follow_contents(cm, obj); 182 183 // Follow the klass field in the mirror. 184 Klass* klass = java_lang_Class::as_Klass(obj); 185 if (klass != NULL) { 186 // For anonymous classes we need to handle the class loader data, 187 // otherwise it won't be claimed and can be unloaded. 188 if (klass->oop_is_instance() && InstanceKlass::cast(klass)->is_anonymous()) { 189 PSParallelCompact::follow_class_loader(cm, klass->class_loader_data()); 190 } else { 191 PSParallelCompact::follow_klass(cm, klass); 192 } 193 } else { 194 // If klass is NULL then this a mirror for a primitive type. 195 // We don't have to follow them, since they are handled as strong 196 // roots in Universe::oops_do. 197 assert(java_lang_Class::is_primitive(obj), "Sanity check"); 198 } 199 200 InstanceMirrorKlass_OOP_ITERATE( \ 201 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ 202 PSParallelCompact::mark_and_push(cm, p), \ 203 assert_is_in) 204 } 205 #endif // INCLUDE_ALL_GCS 206 207 int InstanceMirrorKlass::oop_adjust_pointers(oop obj) { 208 int size = oop_size(obj); 209 InstanceKlass::oop_adjust_pointers(obj); 210 211 InstanceMirrorKlass_OOP_ITERATE( \ 212 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj), \ 320 ALL_OOP_OOP_ITERATE_CLOSURES_2(InstanceMirrorKlass_OOP_OOP_ITERATE_DEFN_m) 321 322 #if INCLUDE_ALL_GCS 323 void InstanceMirrorKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { 324 // Note that we don't have to follow the mirror -> klass pointer, since all 325 // klasses that are dirty will be scavenged when we iterate over the 326 // ClassLoaderData objects. 327 328 InstanceKlass::oop_push_contents(pm, obj); 329 InstanceMirrorKlass_OOP_ITERATE( \ 330 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),\ 331 if (PSScavenge::should_scavenge(p)) { \ 332 pm->claim_or_forward_depth(p); \ 333 }, \ 334 assert_nothing ) 335 } 336 337 int InstanceMirrorKlass::oop_update_pointers(ParCompactionManager* cm, oop obj) { 338 int size = oop_size(obj); 339 InstanceKlass::oop_update_pointers(cm, obj); 340 341 InstanceMirrorKlass_OOP_ITERATE( \ 342 start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),\ 343 PSParallelCompact::adjust_pointer(p), \ 344 assert_nothing) 345 return size; 346 } 347 #endif // INCLUDE_ALL_GCS 348 349 int InstanceMirrorKlass::instance_size(KlassHandle k) { 350 if (k() != NULL && k->oop_is_instance()) { 351 return align_object_size(size_helper() + InstanceKlass::cast(k())->static_field_size()); 352 } 353 return size_helper(); 354 } 355 356 instanceOop InstanceMirrorKlass::allocate_instance(KlassHandle k, TRAPS) { 357 // Query before forming handle. 358 int size = instance_size(k); 359 KlassHandle h_k(THREAD, this); |