src/share/vm/oops/instanceMirrorKlass.cpp

Print this page




 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);