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