665 }
666
667 void DefNewGeneration::remove_forwarding_pointers() {
668 RemoveForwardedPointerClosure rspc;
669 eden()->object_iterate(&rspc);
670 from()->object_iterate(&rspc);
671 restore_preserved_marks();
672 }
673
674 void DefNewGeneration::restore_preserved_marks() {
675 _preserved_marks_set.restore(NULL);
676 }
677
678 void DefNewGeneration::handle_promotion_failure(oop old) {
679 log_debug(gc, promotion)("Promotion failure size = %d) ", old->size());
680
681 _promotion_failed = true;
682 _promotion_failed_info.register_copy_failure(old->size());
683 _preserved_marks_set.get()->push_if_necessary(old, old->mark());
684 // forward to self
685 old->forward_to(old);
686
687 _promo_failure_scan_stack.push(old);
688
689 if (!_promo_failure_drain_in_progress) {
690 // prevent recursion in copy_to_survivor_space()
691 _promo_failure_drain_in_progress = true;
692 drain_promo_failure_scan_stack();
693 _promo_failure_drain_in_progress = false;
694 }
695 }
696
697 oop DefNewGeneration::copy_to_survivor_space(oop old) {
698 assert(is_in_reserved(old) && !old->is_forwarded(),
699 "shouldn't be scavenging this oop");
700 size_t s = old->size();
701 oop obj = NULL;
702
703 // Try allocating obj in to-space (unless too old)
704 if (old->age() < tenuring_threshold()) {
705 obj = cast_to_oop(to()->allocate(s));
|
665 }
666
667 void DefNewGeneration::remove_forwarding_pointers() {
668 RemoveForwardedPointerClosure rspc;
669 eden()->object_iterate(&rspc);
670 from()->object_iterate(&rspc);
671 restore_preserved_marks();
672 }
673
674 void DefNewGeneration::restore_preserved_marks() {
675 _preserved_marks_set.restore(NULL);
676 }
677
678 void DefNewGeneration::handle_promotion_failure(oop old) {
679 log_debug(gc, promotion)("Promotion failure size = %d) ", old->size());
680
681 _promotion_failed = true;
682 _promotion_failed_info.register_copy_failure(old->size());
683 _preserved_marks_set.get()->push_if_necessary(old, old->mark());
684 // forward to self
685 old->forward_to_self();
686
687 _promo_failure_scan_stack.push(old);
688
689 if (!_promo_failure_drain_in_progress) {
690 // prevent recursion in copy_to_survivor_space()
691 _promo_failure_drain_in_progress = true;
692 drain_promo_failure_scan_stack();
693 _promo_failure_drain_in_progress = false;
694 }
695 }
696
697 oop DefNewGeneration::copy_to_survivor_space(oop old) {
698 assert(is_in_reserved(old) && !old->is_forwarded(),
699 "shouldn't be scavenging this oop");
700 size_t s = old->size();
701 oop obj = NULL;
702
703 // Try allocating obj in to-space (unless too old)
704 if (old->age() < tenuring_threshold()) {
705 obj = cast_to_oop(to()->allocate(s));
|