src/share/vm/memory/dump.cpp

Print this page




 214   if (obj != NULL) {
 215     MarkObjectsSkippingKlassesOopClosure mark_all;
 216     obj->oop_iterate(&mark_all);
 217   }
 218 }
 219 
 220 
 221 // Closure:  mark common read-only objects
 222 
 223 class MarkCommonReadOnly : public ObjectClosure {
 224 private:
 225   MarkObjectsOopClosure mark_all;
 226 public:
 227   void do_object(oop obj) {
 228 
 229     // Mark all constMethod objects.
 230 
 231     if (obj->is_constMethod()) {
 232       mark_object(obj);
 233       mark_object(constMethodOop(obj)->stackmap_data());
 234       // Exception tables are needed by ci code during compilation.
 235       mark_object(constMethodOop(obj)->exception_table());
 236     }
 237 
 238     // Mark objects referenced by klass objects which are read-only.
 239 
 240     else if (obj->is_klass()) {
 241       Klass* k = Klass::cast((klassOop)obj);
 242       mark_object(k->secondary_supers());
 243 
 244       // The METHODS() OBJARRAYS CANNOT BE MADE READ-ONLY, even though
 245       // it is never modified. Otherwise, they will be pre-marked; the
 246       // GC marking phase will skip them; and by skipping them will fail
 247       // to mark the methods objects referenced by the array.
 248 
 249       if (obj->blueprint()->oop_is_instanceKlass()) {
 250         instanceKlass* ik = instanceKlass::cast((klassOop)obj);
 251         mark_object(ik->method_ordering());
 252         mark_object(ik->local_interfaces());
 253         mark_object(ik->transitive_interfaces());
 254         mark_object(ik->fields());
 255 


 496   void do_object(oop obj) {
 497     if (obj->is_klass() && obj->blueprint()->oop_is_instanceKlass()) {
 498       instanceKlass* ik = instanceKlass::cast((klassOop)obj);
 499       int i;
 500 
 501       if (ik->super() != NULL) {
 502         do_object(ik->super());
 503       }
 504 
 505       objArrayOop interfaces = ik->local_interfaces();
 506       mark_and_move_for_policy(OP_favor_startup, interfaces, _move_ro);
 507       for(i = 0; i < interfaces->length(); i++) {
 508         klassOop k = klassOop(interfaces->obj_at(i));
 509         do_object(k);
 510       }
 511 
 512       objArrayOop methods = ik->methods();
 513       for(i = 0; i < methods->length(); i++) {
 514         methodOop m = methodOop(methods->obj_at(i));
 515         mark_and_move_for_policy(OP_favor_startup, m->constMethod(), _move_ro);
 516         mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->exception_table(), _move_ro);
 517         mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->stackmap_data(), _move_ro);
 518       }
 519 
 520       mark_and_move_for_policy(OP_favor_startup, ik->transitive_interfaces(), _move_ro);
 521       mark_and_move_for_policy(OP_favor_startup, ik->fields(), _move_ro);
 522 
 523       mark_and_move_for_policy(OP_favor_runtime, ik->secondary_supers(),  _move_ro);
 524       mark_and_move_for_policy(OP_favor_runtime, ik->method_ordering(),   _move_ro);
 525       mark_and_move_for_policy(OP_favor_runtime, ik->class_annotations(), _move_ro);
 526       mark_and_move_for_policy(OP_favor_runtime, ik->fields_annotations(), _move_ro);
 527       mark_and_move_for_policy(OP_favor_runtime, ik->methods_annotations(), _move_ro);
 528       mark_and_move_for_policy(OP_favor_runtime, ik->methods_parameter_annotations(), _move_ro);
 529       mark_and_move_for_policy(OP_favor_runtime, ik->methods_default_annotations(), _move_ro);
 530       mark_and_move_for_policy(OP_favor_runtime, ik->inner_classes(), _move_ro);
 531       mark_and_move_for_policy(OP_favor_runtime, ik->secondary_supers(), _move_ro);
 532     }
 533   }
 534 };
 535 
 536 class MarkAndMoveOrderedReadWrite: public ObjectClosure {




 214   if (obj != NULL) {
 215     MarkObjectsSkippingKlassesOopClosure mark_all;
 216     obj->oop_iterate(&mark_all);
 217   }
 218 }
 219 
 220 
 221 // Closure:  mark common read-only objects
 222 
 223 class MarkCommonReadOnly : public ObjectClosure {
 224 private:
 225   MarkObjectsOopClosure mark_all;
 226 public:
 227   void do_object(oop obj) {
 228 
 229     // Mark all constMethod objects.
 230 
 231     if (obj->is_constMethod()) {
 232       mark_object(obj);
 233       mark_object(constMethodOop(obj)->stackmap_data());


 234     }
 235 
 236     // Mark objects referenced by klass objects which are read-only.
 237 
 238     else if (obj->is_klass()) {
 239       Klass* k = Klass::cast((klassOop)obj);
 240       mark_object(k->secondary_supers());
 241 
 242       // The METHODS() OBJARRAYS CANNOT BE MADE READ-ONLY, even though
 243       // it is never modified. Otherwise, they will be pre-marked; the
 244       // GC marking phase will skip them; and by skipping them will fail
 245       // to mark the methods objects referenced by the array.
 246 
 247       if (obj->blueprint()->oop_is_instanceKlass()) {
 248         instanceKlass* ik = instanceKlass::cast((klassOop)obj);
 249         mark_object(ik->method_ordering());
 250         mark_object(ik->local_interfaces());
 251         mark_object(ik->transitive_interfaces());
 252         mark_object(ik->fields());
 253 


 494   void do_object(oop obj) {
 495     if (obj->is_klass() && obj->blueprint()->oop_is_instanceKlass()) {
 496       instanceKlass* ik = instanceKlass::cast((klassOop)obj);
 497       int i;
 498 
 499       if (ik->super() != NULL) {
 500         do_object(ik->super());
 501       }
 502 
 503       objArrayOop interfaces = ik->local_interfaces();
 504       mark_and_move_for_policy(OP_favor_startup, interfaces, _move_ro);
 505       for(i = 0; i < interfaces->length(); i++) {
 506         klassOop k = klassOop(interfaces->obj_at(i));
 507         do_object(k);
 508       }
 509 
 510       objArrayOop methods = ik->methods();
 511       for(i = 0; i < methods->length(); i++) {
 512         methodOop m = methodOop(methods->obj_at(i));
 513         mark_and_move_for_policy(OP_favor_startup, m->constMethod(), _move_ro);

 514         mark_and_move_for_policy(OP_favor_runtime, m->constMethod()->stackmap_data(), _move_ro);
 515       }
 516 
 517       mark_and_move_for_policy(OP_favor_startup, ik->transitive_interfaces(), _move_ro);
 518       mark_and_move_for_policy(OP_favor_startup, ik->fields(), _move_ro);
 519 
 520       mark_and_move_for_policy(OP_favor_runtime, ik->secondary_supers(),  _move_ro);
 521       mark_and_move_for_policy(OP_favor_runtime, ik->method_ordering(),   _move_ro);
 522       mark_and_move_for_policy(OP_favor_runtime, ik->class_annotations(), _move_ro);
 523       mark_and_move_for_policy(OP_favor_runtime, ik->fields_annotations(), _move_ro);
 524       mark_and_move_for_policy(OP_favor_runtime, ik->methods_annotations(), _move_ro);
 525       mark_and_move_for_policy(OP_favor_runtime, ik->methods_parameter_annotations(), _move_ro);
 526       mark_and_move_for_policy(OP_favor_runtime, ik->methods_default_annotations(), _move_ro);
 527       mark_and_move_for_policy(OP_favor_runtime, ik->inner_classes(), _move_ro);
 528       mark_and_move_for_policy(OP_favor_runtime, ik->secondary_supers(), _move_ro);
 529     }
 530   }
 531 };
 532 
 533 class MarkAndMoveOrderedReadWrite: public ObjectClosure {