722 update_time_of_last_gc(now);
723
724 gch->trace_heap_after_gc(&gc_tracer);
725
726 _gc_timer->register_gc_end();
727
728 gc_tracer.report_gc_end(_gc_timer->gc_end(), _gc_timer->time_partitions());
729 }
730
731 void DefNewGeneration::init_assuming_no_promotion_failure() {
732 _promotion_failed = false;
733 _promotion_failed_info.reset();
734 from()->set_next_compaction_space(NULL);
735 }
736
737 void DefNewGeneration::remove_forwarding_pointers() {
738 RemoveForwardedPointerClosure rspc;
739 eden()->object_iterate(&rspc);
740 from()->object_iterate(&rspc);
741
742 _preserved_marks_set.restore(GenCollectedHeap::heap()->workers());
743 }
744
745 void DefNewGeneration::handle_promotion_failure(oop old) {
746 log_debug(gc, promotion)("Promotion failure size = %d) ", old->size());
747
748 _promotion_failed = true;
749 _promotion_failed_info.register_copy_failure(old->size());
750 _preserved_marks_set.get()->push_if_necessary(old, old->mark());
751 // forward to self
752 old->forward_to(old);
753
754 _promo_failure_scan_stack.push(old);
755
756 if (!_promo_failure_drain_in_progress) {
757 // prevent recursion in copy_to_survivor_space()
758 _promo_failure_drain_in_progress = true;
759 drain_promo_failure_scan_stack();
760 _promo_failure_drain_in_progress = false;
761 }
762 }
|
722 update_time_of_last_gc(now);
723
724 gch->trace_heap_after_gc(&gc_tracer);
725
726 _gc_timer->register_gc_end();
727
728 gc_tracer.report_gc_end(_gc_timer->gc_end(), _gc_timer->time_partitions());
729 }
730
731 void DefNewGeneration::init_assuming_no_promotion_failure() {
732 _promotion_failed = false;
733 _promotion_failed_info.reset();
734 from()->set_next_compaction_space(NULL);
735 }
736
737 void DefNewGeneration::remove_forwarding_pointers() {
738 RemoveForwardedPointerClosure rspc;
739 eden()->object_iterate(&rspc);
740 from()->object_iterate(&rspc);
741
742 SharedPreservedMarksTaskExecutor task_executor(GenCollectedHeap::heap()->workers());
743 _preserved_marks_set.restore(&task_executor);
744 }
745
746 void DefNewGeneration::handle_promotion_failure(oop old) {
747 log_debug(gc, promotion)("Promotion failure size = %d) ", old->size());
748
749 _promotion_failed = true;
750 _promotion_failed_info.register_copy_failure(old->size());
751 _preserved_marks_set.get()->push_if_necessary(old, old->mark());
752 // forward to self
753 old->forward_to(old);
754
755 _promo_failure_scan_stack.push(old);
756
757 if (!_promo_failure_drain_in_progress) {
758 // prevent recursion in copy_to_survivor_space()
759 _promo_failure_drain_in_progress = true;
760 drain_promo_failure_scan_stack();
761 _promo_failure_drain_in_progress = false;
762 }
763 }
|