283 } |
283 } |
284 |
284 |
285 void constantPoolKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
285 void constantPoolKlass::oop_push_contents(PSPromotionManager* pm, oop obj) { |
286 assert(obj->is_constantPool(), "should be constant pool"); |
286 assert(obj->is_constantPool(), "should be constant pool"); |
287 constantPoolOop cp = (constantPoolOop) obj; |
287 constantPoolOop cp = (constantPoolOop) obj; |
288 if (AnonymousClasses && cp->has_pseudo_string() && cp->tags() != NULL) { |
288 if (cp->tags() != NULL && |
289 oop* base = (oop*)cp->base(); |
289 (!JavaObjectsInPerm || (AnonymousClasses && cp->has_pseudo_string()))) { |
290 for (int i = 0; i < cp->length(); ++i, ++base) { |
290 for (int i = 1; i < cp->length(); ++i) { |
291 if (cp->tag_at(i).is_string()) { |
291 if (cp->tag_at(i).is_string()) { |
|
292 oop* base = cp->obj_at_addr_raw(i); |
292 if (PSScavenge::should_scavenge(base)) { |
293 if (PSScavenge::should_scavenge(base)) { |
293 pm->claim_or_forward_depth(base); |
294 pm->claim_or_forward_depth(base); |
294 } |
295 } |
295 } |
296 } |
296 } |
297 } |
458 } |
459 } |
459 } |
460 } |
460 if (cp->tag_at(i).is_string()) { |
461 if (cp->tag_at(i).is_string()) { |
461 if (!cp->has_pseudo_string()) { |
462 if (!cp->has_pseudo_string()) { |
462 if (entry.is_oop()) { |
463 if (entry.is_oop()) { |
463 guarantee(entry.get_oop()->is_perm(), "should be in permspace"); |
464 guarantee(!JavaObjectsInPerm || entry.get_oop()->is_perm(), |
|
465 "should be in permspace"); |
464 guarantee(entry.get_oop()->is_instance(), "should be instance"); |
466 guarantee(entry.get_oop()->is_instance(), "should be instance"); |
465 } |
467 } |
466 } else { |
468 } else { |
467 // can be non-perm, can be non-instance (array) |
469 // can be non-perm, can be non-instance (array) |
468 } |
470 } |