hotspot/src/share/vm/memory/defNewGeneration.cpp
changeset 4574 b2d5b0975515
parent 3908 24b55ad4c228
child 5343 95a5c4b89273
equal deleted inserted replaced
4481:de92ec484f5e 4574:b2d5b0975515
   607     delete _promo_failure_scan_stack;
   607     delete _promo_failure_scan_stack;
   608     _promo_failure_scan_stack = NULL;
   608     _promo_failure_scan_stack = NULL;
   609 
   609 
   610     remove_forwarding_pointers();
   610     remove_forwarding_pointers();
   611     if (PrintGCDetails) {
   611     if (PrintGCDetails) {
   612       gclog_or_tty->print(" (promotion failed)");
   612       gclog_or_tty->print(" (promotion failed) ");
   613     }
   613     }
   614     // Add to-space to the list of space to compact
   614     // Add to-space to the list of space to compact
   615     // when a promotion failure has occurred.  In that
   615     // when a promotion failure has occurred.  In that
   616     // case there can be live objects in to-space
   616     // case there can be live objects in to-space
   617     // as a result of a partial evacuation of eden
   617     // as a result of a partial evacuation of eden
   618     // and from-space.
   618     // and from-space.
   619     swap_spaces();   // For the sake of uniformity wrt ParNewGeneration::collect().
   619     swap_spaces();   // For the sake of uniformity wrt ParNewGeneration::collect().
   620     from()->set_next_compaction_space(to());
   620     from()->set_next_compaction_space(to());
   621     gch->set_incremental_collection_will_fail();
   621     gch->set_incremental_collection_will_fail();
       
   622 
       
   623     // Inform the next generation that a promotion failure occurred.
       
   624     _next_gen->promotion_failure_occurred();
   622 
   625 
   623     // Reset the PromotionFailureALot counters.
   626     // Reset the PromotionFailureALot counters.
   624     NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)
   627     NOT_PRODUCT(Universe::heap()->reset_promotion_should_fail();)
   625   }
   628   }
   626   // set new iteration safe limit for the survivor spaces
   629   // set new iteration safe limit for the survivor spaces
   677   }
   680   }
   678 }
   681 }
   679 
   682 
   680 void DefNewGeneration::handle_promotion_failure(oop old) {
   683 void DefNewGeneration::handle_promotion_failure(oop old) {
   681   preserve_mark_if_necessary(old, old->mark());
   684   preserve_mark_if_necessary(old, old->mark());
       
   685   if (!_promotion_failed && PrintPromotionFailure) {
       
   686     gclog_or_tty->print(" (promotion failure size = " SIZE_FORMAT ") ",
       
   687                         old->size());
       
   688   }
       
   689 
   682   // forward to self
   690   // forward to self
   683   old->forward_to(old);
   691   old->forward_to(old);
   684   _promotion_failed = true;
   692   _promotion_failed = true;
   685 
   693 
   686   push_on_promo_failure_scan_stack(old);
   694   push_on_promo_failure_scan_stack(old);