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 {
|