73 sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
74 }
75 }
76
77 const char* VM_ShenandoahFullGC::name() const {
78 return "Shenandoah Full GC";
79 }
80
81
82 bool VM_ShenandoahReferenceOperation::doit_prologue() {
83 _pending_list_locker.lock();
84 return true;
85 }
86
87 void VM_ShenandoahReferenceOperation::doit_epilogue() {
88 _pending_list_locker.unlock();
89 }
90
91 void VM_ShenandoahStartEvacuation::doit() {
92
93 // We need to do the finish mark here, so that a JNI critical region
94 // can't divide it from evacuation start. It is critical that we
95 // evacuate roots right after finishing marking, so that we don't
96 // get unmarked objects in the roots.
97 ShenandoahHeap *sh = ShenandoahHeap::heap();
98 if (! sh->cancelled_concgc()) {
99 if (ShenandoahGCVerbose)
100 tty->print("vm_ShenandoahFinalMark\n");
101
102 GCTraceTime(Info, gc, phases) time("Pause Init-Evacuation", sh->gc_timer());
103 sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::final_mark);
104 sh->concurrentMark()->finish_mark_from_roots();
105 sh->stop_concurrent_marking();
106 sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::final_mark);
107
108 sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::prepare_evac);
109 sh->prepare_for_concurrent_evacuation();
110 sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::prepare_evac);
111
112 sh->set_evacuation_in_progress(true);
113
114 // From here on, we need to update references.
|
73 sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::resize_tlabs);
74 }
75 }
76
77 const char* VM_ShenandoahFullGC::name() const {
78 return "Shenandoah Full GC";
79 }
80
81
82 bool VM_ShenandoahReferenceOperation::doit_prologue() {
83 _pending_list_locker.lock();
84 return true;
85 }
86
87 void VM_ShenandoahReferenceOperation::doit_epilogue() {
88 _pending_list_locker.unlock();
89 }
90
91 void VM_ShenandoahStartEvacuation::doit() {
92
93 // It is critical that we
94 // evacuate roots right after finishing marking, so that we don't
95 // get unmarked objects in the roots.
96 ShenandoahHeap *sh = ShenandoahHeap::heap();
97 if (! sh->cancelled_concgc()) {
98 if (ShenandoahGCVerbose)
99 tty->print("vm_ShenandoahFinalMark\n");
100
101 GCTraceTime(Info, gc, phases) time("Pause Init-Evacuation", sh->gc_timer());
102 sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::final_mark);
103 sh->concurrentMark()->finish_mark_from_roots();
104 sh->stop_concurrent_marking();
105 sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::final_mark);
106
107 sh->shenandoahPolicy()->record_phase_start(ShenandoahCollectorPolicy::prepare_evac);
108 sh->prepare_for_concurrent_evacuation();
109 sh->shenandoahPolicy()->record_phase_end(ShenandoahCollectorPolicy::prepare_evac);
110
111 sh->set_evacuation_in_progress(true);
112
113 // From here on, we need to update references.
|