--- old/src/hotspot/share/gc/parallel/psScavenge.cpp 2018-05-08 09:41:09.328468033 +0200 +++ new/src/hotspot/share/gc/parallel/psScavenge.cpp 2018-05-08 09:41:09.036459010 +0200 @@ -58,18 +58,19 @@ #include "services/memoryService.hpp" #include "utilities/stack.inline.hpp" -HeapWord* PSScavenge::_to_space_top_before_gc = NULL; -int PSScavenge::_consecutive_skipped_scavenges = 0; -SpanReferenceProcessor* PSScavenge::_ref_processor = NULL; -PSCardTable* PSScavenge::_card_table = NULL; -bool PSScavenge::_survivor_overflow = false; -uint PSScavenge::_tenuring_threshold = 0; -HeapWord* PSScavenge::_young_generation_boundary = NULL; -uintptr_t PSScavenge::_young_generation_boundary_compressed = 0; -elapsedTimer PSScavenge::_accumulated_time; -STWGCTimer PSScavenge::_gc_timer; -ParallelScavengeTracer PSScavenge::_gc_tracer; -CollectorCounters* PSScavenge::_counters = NULL; +HeapWord* PSScavenge::_to_space_top_before_gc = NULL; +int PSScavenge::_consecutive_skipped_scavenges = 0; +SpanSubjectToDiscoveryClosure PSScavenge::_span_discoverer; +ReferenceProcessor* PSScavenge::_ref_processor = NULL; +PSCardTable* PSScavenge::_card_table = NULL; +bool PSScavenge::_survivor_overflow = false; +uint PSScavenge::_tenuring_threshold = 0; +HeapWord* PSScavenge::_young_generation_boundary = NULL; +uintptr_t PSScavenge::_young_generation_boundary_compressed = 0; +elapsedTimer PSScavenge::_accumulated_time; +STWGCTimer PSScavenge::_gc_timer; +ParallelScavengeTracer PSScavenge::_gc_tracer; +CollectorCounters* PSScavenge::_counters = NULL; // Define before use class PSIsAliveClosure: public BoolObjectClosure { @@ -766,16 +767,15 @@ set_young_generation_boundary(young_gen->eden_space()->bottom()); // Initialize ref handling object for scavenging. - MemRegion mr = young_gen->reserved(); - + _span_discoverer.set_span(young_gen->reserved()); _ref_processor = - new SpanReferenceProcessor(mr, // span - ParallelRefProcEnabled && (ParallelGCThreads > 1), // mt processing - ParallelGCThreads, // mt processing degree - true, // mt discovery - ParallelGCThreads, // mt discovery degree - true, // atomic_discovery - NULL); // header provides liveness info + new ReferenceProcessor(&_span_discoverer, // span + ParallelRefProcEnabled && (ParallelGCThreads > 1), // mt processing + ParallelGCThreads, // mt processing degree + true, // mt discovery + ParallelGCThreads, // mt discovery degree + true, // atomic_discovery + NULL); // header provides liveness info // Cache the cardtable _card_table = heap->card_table();