< prev index next >

src/hotspot/share/gc/serial/defNewGeneration.cpp

Print this page

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));
< prev index next >