src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
changeset 58674 42a3a8941418
parent 58543 a7a606f6311c
child 58679 9c3209ff7550
child 58686 0279391875bf
equal deleted inserted replaced
58673:06cc25fe0ca3 58674:42a3a8941418
   388     ShenandoahHeapLocker lock(_heap->lock());
   388     ShenandoahHeapLocker lock(_heap->lock());
   389     prepare();
   389     prepare();
   390   }
   390   }
   391 
   391 
   392   _heap->set_concurrent_traversal_in_progress(true);
   392   _heap->set_concurrent_traversal_in_progress(true);
       
   393   _heap->set_has_forwarded_objects(true);
   393 
   394 
   394   bool process_refs = _heap->process_references();
   395   bool process_refs = _heap->process_references();
   395   if (process_refs) {
   396   if (process_refs) {
   396     ReferenceProcessor* rp = _heap->ref_processor();
   397     ReferenceProcessor* rp = _heap->ref_processor();
   397     rp->enable_discovery(true /*verify_no_refs*/);
   398     rp->enable_discovery(true /*verify_no_refs*/);
   599     assert(_task_queues->is_empty(), "queues must be empty after traversal GC");
   600     assert(_task_queues->is_empty(), "queues must be empty after traversal GC");
   600     TASKQUEUE_STATS_ONLY(_task_queues->print_taskqueue_stats());
   601     TASKQUEUE_STATS_ONLY(_task_queues->print_taskqueue_stats());
   601     TASKQUEUE_STATS_ONLY(_task_queues->reset_taskqueue_stats());
   602     TASKQUEUE_STATS_ONLY(_task_queues->reset_taskqueue_stats());
   602 
   603 
   603     // No more marking expected
   604     // No more marking expected
       
   605     _heap->set_concurrent_traversal_in_progress(false);
   604     _heap->mark_complete_marking_context();
   606     _heap->mark_complete_marking_context();
   605 
   607 
   606     fixup_roots();
   608     fixup_roots();
   607     _heap->parallel_cleaning(false);
   609     _heap->parallel_cleaning(false);
       
   610 
       
   611     _heap->set_has_forwarded_objects(false);
   608 
   612 
   609     // Resize metaspace
   613     // Resize metaspace
   610     MetaspaceGC::compute_new_size();
   614     MetaspaceGC::compute_new_size();
   611 
   615 
   612     // Still good? We can now trash the cset, and make final verification
   616     // Still good? We can now trash the cset, and make final verification
   649       _heap->free_set()->rebuild();
   653       _heap->free_set()->rebuild();
   650       reset();
   654       reset();
   651     }
   655     }
   652 
   656 
   653     assert(_task_queues->is_empty(), "queues must be empty after traversal GC");
   657     assert(_task_queues->is_empty(), "queues must be empty after traversal GC");
   654     _heap->set_concurrent_traversal_in_progress(false);
       
   655     assert(!_heap->cancelled_gc(), "must not be cancelled when getting out here");
   658     assert(!_heap->cancelled_gc(), "must not be cancelled when getting out here");
   656 
   659 
   657     if (ShenandoahVerify) {
   660     if (ShenandoahVerify) {
   658       _heap->verifier()->verify_after_traversal();
   661       _heap->verifier()->verify_after_traversal();
   659     }
   662     }