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