# HG changeset patch # User rkennke # Date 1519302199 -3600 # Thu Feb 22 13:23:19 2018 +0100 # Node ID 4a9a014d0fa7e7f6b90a805c00f5ce6a882a90e4 # Parent cb385270033996afac86aa960b02a33f675a0eb4 Traversal: Initialize extra liveness arrays when conc-threads > par-threads diff --git a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp --- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp @@ -170,10 +170,6 @@ ShenandoahObjToScanQueueSet* queues = _heap->traversal_gc()->task_queues(); ShenandoahObjToScanQueue* q = queues->queue(worker_id); - // Initialize live data. - jushort* ld = _heap->traversal_gc()->get_liveness(worker_id); - Copy::fill_to_bytes(ld, _heap->num_regions() * sizeof(jushort)); - bool process_refs = _heap->shenandoahPolicy()->process_references(); bool unload_classes = _heap->shenandoahPolicy()->unload_classes(); ReferenceProcessor* rp = NULL; @@ -272,9 +268,6 @@ traversal_gc->main_loop(worker_id, _terminator, false); } - // Flush remaining liveness data. - traversal_gc->flush_liveness(worker_id); - } }; @@ -409,7 +402,10 @@ template void ShenandoahTraversalGC::main_loop_prework(uint w, ParallelTaskTerminator* t) { ShenandoahObjToScanQueue* q = task_queues()->queue(w); + + // Initialize live data. jushort* ld = get_liveness(w); + Copy::fill_to_bytes(ld, _heap->num_regions() * sizeof(jushort)); ReferenceProcessor* rp = NULL; if (_heap->shenandoahPolicy()->process_references()) { @@ -434,6 +430,9 @@ main_loop_work(&cl, ld, w, t); } } + + flush_liveness(w); + } template @@ -728,7 +727,6 @@ ReferenceProcessorIsAliveMutator fix_alive(rp, sh->is_alive_closure()); traversal_gc->main_loop(_worker_id, _terminator, false); - traversal_gc->flush_liveness(_worker_id); if (_reset_terminator) { _terminator->reset_for_reuse();