--- old/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp 2014-12-10 15:32:31.040117295 +0100 +++ new/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp 2014-12-10 15:32:30.928121063 +0100 @@ -308,7 +308,7 @@ inline ParScanThreadState& thread_state(int i); - void trace_promotion_failed(YoungGCTracer& gc_tracer); + void trace_promotion_failed(const YoungGCTracer* gc_tracer); void reset(int active_workers, bool promotion_failed); void flush(); @@ -357,10 +357,10 @@ return ((ParScanThreadState*)_data)[i]; } -void ParScanThreadStateSet::trace_promotion_failed(YoungGCTracer& gc_tracer) { +void ParScanThreadStateSet::trace_promotion_failed(const YoungGCTracer* gc_tracer) { for (int i = 0; i < length(); ++i) { if (thread_state(i).promotion_failed()) { - gc_tracer.report_promotion_failed(thread_state(i).promotion_failed_info()); + gc_tracer->report_promotion_failed(thread_state(i).promotion_failed_info()); thread_state(i).promotion_failed_info().reset(); } } @@ -899,7 +899,7 @@ _next_gen->promotion_failure_occurred(); // Trace promotion failure in the parallel GC threads - thread_state_set.trace_promotion_failed(_gc_tracer); + thread_state_set.trace_promotion_failed(gc_tracer()); // Single threaded code may have reported promotion failure to the global state if (_promotion_failed_info.has_failed()) { _gc_tracer.report_promotion_failed(_promotion_failed_info); @@ -942,7 +942,7 @@ assert(to()->is_empty(), "Else not collection_attempt_is_safe"); _gc_tracer.report_gc_start(gch->gc_cause(), _gc_timer->gc_start()); - gch->trace_heap_before_gc(&_gc_tracer); + gch->trace_heap_before_gc(gc_tracer()); init_assuming_no_promotion_failure(); @@ -993,7 +993,7 @@ // Trace and reset failed promotion info. if (promotion_failed()) { - thread_state_set.trace_promotion_failed(_gc_tracer); + thread_state_set.trace_promotion_failed(gc_tracer()); } // Process (weak) reference objects found during scavenge. @@ -1087,7 +1087,7 @@ } rp->verify_no_references_recorded(); - gch->trace_heap_after_gc(&_gc_tracer); + gch->trace_heap_after_gc(gc_tracer()); _gc_tracer.report_tenuring_threshold(tenuring_threshold()); _gc_timer->register_gc_end();