2040 ShenandoahPhaseTimings::full_gc_purge_par : |
2040 ShenandoahPhaseTimings::full_gc_purge_par : |
2041 ShenandoahPhaseTimings::purge_par; |
2041 ShenandoahPhaseTimings::purge_par; |
2042 // Cleanup weak roots |
2042 // Cleanup weak roots |
2043 ShenandoahGCPhase phase(timing_phase); |
2043 ShenandoahGCPhase phase(timing_phase); |
2044 if (has_forwarded_objects()) { |
2044 if (has_forwarded_objects()) { |
2045 ShenandoahForwardedIsAliveClosure is_alive; |
2045 if (is_traversal_mode()) { |
2046 ShenandoahUpdateRefsClosure keep_alive; |
2046 ShenandoahForwardedIsAliveClosure is_alive; |
2047 ShenandoahParallelWeakRootsCleaningTask<ShenandoahForwardedIsAliveClosure, ShenandoahUpdateRefsClosure> |
2047 ShenandoahTraversalUpdateRefsClosure keep_alive; |
2048 cleaning_task(&is_alive, &keep_alive, num_workers); |
2048 ShenandoahParallelWeakRootsCleaningTask<ShenandoahForwardedIsAliveClosure, ShenandoahTraversalUpdateRefsClosure> |
2049 _workers->run_task(&cleaning_task); |
2049 cleaning_task(&is_alive, &keep_alive, num_workers); |
|
2050 _workers->run_task(&cleaning_task); |
|
2051 } else { |
|
2052 ShenandoahForwardedIsAliveClosure is_alive; |
|
2053 ShenandoahUpdateRefsClosure keep_alive; |
|
2054 ShenandoahParallelWeakRootsCleaningTask<ShenandoahForwardedIsAliveClosure, ShenandoahUpdateRefsClosure> |
|
2055 cleaning_task(&is_alive, &keep_alive, num_workers); |
|
2056 _workers->run_task(&cleaning_task); |
|
2057 } |
2050 } else { |
2058 } else { |
2051 ShenandoahIsAliveClosure is_alive; |
2059 ShenandoahIsAliveClosure is_alive; |
2052 #ifdef ASSERT |
2060 #ifdef ASSERT |
2053 ShenandoahAssertNotForwardedClosure verify_cl; |
2061 ShenandoahAssertNotForwardedClosure verify_cl; |
2054 ShenandoahParallelWeakRootsCleaningTask<ShenandoahIsAliveClosure, ShenandoahAssertNotForwardedClosure> |
2062 ShenandoahParallelWeakRootsCleaningTask<ShenandoahIsAliveClosure, ShenandoahAssertNotForwardedClosure> |