8200626: Restore history for g1ConcurrentMarkThread.*

Reviewed-by: shade, sjohanss
This commit is contained in:
Erik Helin 2018-04-04 10:12:02 +02:00
parent b938ae51ce
commit b025fab0d2
12 changed files with 66 additions and 64 deletions

View File

@ -29,7 +29,6 @@
#include "code/codeCache.hpp"
#include "code/icBuffer.hpp"
#include "gc/g1/bufferingOopClosure.hpp"
#include "gc/g1/concurrentMarkThread.inline.hpp"
#include "gc/g1/g1Allocator.inline.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1CollectionSet.hpp"
@ -37,6 +36,7 @@
#include "gc/g1/g1CollectorState.hpp"
#include "gc/g1/g1ConcurrentRefine.hpp"
#include "gc/g1/g1ConcurrentRefineThread.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/g1/g1EvacStats.inline.hpp"
#include "gc/g1/g1FullCollector.hpp"
#include "gc/g1/g1GCPhaseTimes.hpp"

View File

@ -79,7 +79,7 @@ class G1RemSet;
class G1YoungRemSetSamplingThread;
class HeapRegionRemSetIterator;
class G1ConcurrentMark;
class ConcurrentMarkThread;
class G1ConcurrentMarkThread;
class G1ConcurrentRefine;
class GenerationCounters;
class STWGCTimer;
@ -766,7 +766,7 @@ private:
// The concurrent marker (and the thread it runs in.)
G1ConcurrentMark* _cm;
ConcurrentMarkThread* _cmThread;
G1ConcurrentMarkThread* _cmThread;
// The concurrent refiner.
G1ConcurrentRefine* _cr;

View File

@ -26,10 +26,10 @@
#include "classfile/metadataOnStackMark.hpp"
#include "classfile/symbolTable.hpp"
#include "code/codeCache.hpp"
#include "gc/g1/concurrentMarkThread.inline.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1CollectorState.hpp"
#include "gc/g1/g1ConcurrentMark.inline.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/g1/g1HeapVerifier.hpp"
#include "gc/g1/g1OopClosures.inline.hpp"
#include "gc/g1/g1Policy.hpp"
@ -398,7 +398,7 @@ G1ConcurrentMark::G1ConcurrentMark(G1CollectedHeap* g1h,
_mark_bitmap_2.initialize(g1h->reserved_region(), next_bitmap_storage);
// Create & start ConcurrentMark thread.
_cm_thread = new ConcurrentMarkThread(this);
_cm_thread = new G1ConcurrentMarkThread(this);
if (_cm_thread->osthread() == NULL) {
vm_shutdown_during_initialization("Could not create ConcurrentMarkThread");
}
@ -824,6 +824,7 @@ void G1ConcurrentMark::enter_second_sync_barrier(uint worker_id) {
class G1CMConcurrentMarkingTask : public AbstractGangTask {
G1ConcurrentMark* _cm;
public:
void work(uint worker_id) {
assert(Thread::current()->is_ConcurrentGC_thread(), "Not a concurrent GC thread");

View File

@ -33,7 +33,7 @@
#include "memory/allocation.hpp"
class ConcurrentGCTimer;
class ConcurrentMarkThread;
class G1ConcurrentMarkThread;
class G1CollectedHeap;
class G1CMTask;
class G1ConcurrentMark;
@ -277,7 +277,7 @@ public:
// This class manages data structures and methods for doing liveness analysis in
// G1's concurrent cycle.
class G1ConcurrentMark : public CHeapObj<mtGC> {
friend class ConcurrentMarkThread;
friend class G1ConcurrentMarkThread;
friend class G1CMRefProcTaskProxy;
friend class G1CMRefProcTaskExecutor;
friend class G1CMKeepAliveAndDrainClosure;
@ -287,35 +287,35 @@ class G1ConcurrentMark : public CHeapObj<mtGC> {
friend class G1CMRemarkTask;
friend class G1CMTask;
ConcurrentMarkThread* _cm_thread; // The thread doing the work
G1CollectedHeap* _g1h; // The heap
bool _completed_initialization; // Set to true when initialization is complete
G1ConcurrentMarkThread* _cm_thread; // The thread doing the work
G1CollectedHeap* _g1h; // The heap
bool _completed_initialization; // Set to true when initialization is complete
// Concurrent marking support structures
G1CMBitMap _mark_bitmap_1;
G1CMBitMap _mark_bitmap_2;
G1CMBitMap* _prev_mark_bitmap; // Completed mark bitmap
G1CMBitMap* _next_mark_bitmap; // Under-construction mark bitmap
G1CMBitMap _mark_bitmap_1;
G1CMBitMap _mark_bitmap_2;
G1CMBitMap* _prev_mark_bitmap; // Completed mark bitmap
G1CMBitMap* _next_mark_bitmap; // Under-construction mark bitmap
// Heap bounds
MemRegion const _heap;
MemRegion const _heap;
// Root region tracking and claiming
G1CMRootRegions _root_regions;
G1CMRootRegions _root_regions;
// For grey objects
G1CMMarkStack _global_mark_stack; // Grey objects behind global finger
HeapWord* volatile _finger; // The global finger, region aligned,
// always pointing to the end of the
// last claimed region
G1CMMarkStack _global_mark_stack; // Grey objects behind global finger
HeapWord* volatile _finger; // The global finger, region aligned,
// always pointing to the end of the
// last claimed region
uint _worker_id_offset;
uint _max_num_tasks; // Maximum number of marking tasks
uint _num_active_tasks; // Number of tasks currently active
G1CMTask** _tasks; // Task queue array (max_worker_id length)
uint _worker_id_offset;
uint _max_num_tasks; // Maximum number of marking tasks
uint _num_active_tasks; // Number of tasks currently active
G1CMTask** _tasks; // Task queue array (max_worker_id length)
G1CMTaskQueueSet* _task_queues; // Task queue set
ParallelTaskTerminator _terminator; // For termination
G1CMTaskQueueSet* _task_queues; // Task queue set
ParallelTaskTerminator _terminator; // For termination
// Two sync barriers that are used to synchronize tasks when an
// overflow occurs. The algorithm is the following. All tasks enter
@ -326,30 +326,30 @@ class G1ConcurrentMark : public CHeapObj<mtGC> {
// ensure, that no task starts doing work before all data
// structures (local and global) have been re-initialized. When they
// exit it, they are free to start working again.
WorkGangBarrierSync _first_overflow_barrier_sync;
WorkGangBarrierSync _second_overflow_barrier_sync;
WorkGangBarrierSync _first_overflow_barrier_sync;
WorkGangBarrierSync _second_overflow_barrier_sync;
// This is set by any task, when an overflow on the global data
// structures is detected
volatile bool _has_overflown;
volatile bool _has_overflown;
// True: marking is concurrent, false: we're in remark
volatile bool _concurrent;
volatile bool _concurrent;
// Set at the end of a Full GC so that marking aborts
volatile bool _has_aborted;
volatile bool _has_aborted;
// Used when remark aborts due to an overflow to indicate that
// another concurrent marking phase should start
volatile bool _restart_for_overflow;
volatile bool _restart_for_overflow;
// This is true from the very start of concurrent marking until the
// point when all the tasks complete their work. It is really used
// to determine the points between the end of concurrent marking and
// time of remark.
volatile bool _concurrent_marking_in_progress;
volatile bool _concurrent_marking_in_progress;
ConcurrentGCTimer* _gc_timer_cm;
ConcurrentGCTimer* _gc_timer_cm;
G1OldTracer* _gc_tracer_cm;
G1OldTracer* _gc_tracer_cm;
// Timing statistics. All of them are in ms
NumberSeq _init_times;
@ -523,7 +523,7 @@ public:
G1RegionToSpaceMapper* next_bitmap_storage);
~G1ConcurrentMark();
ConcurrentMarkThread* cm_thread() { return _cm_thread; }
G1ConcurrentMarkThread* cm_thread() { return _cm_thread; }
const G1CMBitMap* const prev_mark_bitmap() const { return _prev_mark_bitmap; }
G1CMBitMap* next_mark_bitmap() const { return _next_mark_bitmap; }

View File

@ -24,10 +24,10 @@
#include "precompiled.hpp"
#include "classfile/classLoaderData.hpp"
#include "gc/g1/concurrentMarkThread.inline.hpp"
#include "gc/g1/g1Analytics.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1ConcurrentMark.inline.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/g1/g1MMUTracker.hpp"
#include "gc/g1/g1Policy.hpp"
#include "gc/g1/g1RemSet.hpp"
@ -75,7 +75,7 @@ public:
// The CM thread is created when the G1 garbage collector is used
ConcurrentMarkThread::ConcurrentMarkThread(G1ConcurrentMark* cm) :
G1ConcurrentMarkThread::G1ConcurrentMarkThread(G1ConcurrentMark* cm) :
ConcurrentGCThread(),
_cm(cm),
_state(Idle),
@ -107,7 +107,7 @@ public:
}
};
double ConcurrentMarkThread::mmu_sleep_time(G1Policy* g1_policy, bool remark) {
double G1ConcurrentMarkThread::mmu_sleep_time(G1Policy* g1_policy, bool remark) {
// There are 3 reasons to use SuspendibleThreadSetJoiner.
// 1. To avoid concurrency problem.
// - G1MMUTracker::add_pause(), when_sec() and its variation(when_ms() etc..) can be called
@ -126,7 +126,7 @@ double ConcurrentMarkThread::mmu_sleep_time(G1Policy* g1_policy, bool remark) {
return mmu_tracker->when_ms(now, prediction_ms);
}
void ConcurrentMarkThread::delay_to_keep_mmu(G1Policy* g1_policy, bool remark) {
void G1ConcurrentMarkThread::delay_to_keep_mmu(G1Policy* g1_policy, bool remark) {
if (g1_policy->adaptive_young_list_length()) {
jlong sleep_time_ms = mmu_sleep_time(g1_policy, remark);
if (!_cm->has_aborted() && sleep_time_ms > 0) {
@ -194,7 +194,7 @@ class G1ConcPhaseManager : public StackObj {
ConcurrentGCPhaseManager _manager;
public:
G1ConcPhaseManager(int phase, ConcurrentMarkThread* thread) :
G1ConcPhaseManager(int phase, G1ConcurrentMarkThread* thread) :
_cm(thread->cm()),
_manager(phase, thread->phase_manager_stack())
{ }
@ -218,17 +218,17 @@ class G1ConcPhase : public StackObj {
G1ConcPhaseManager _manager;
public:
G1ConcPhase(int phase, ConcurrentMarkThread* thread) :
G1ConcPhase(int phase, G1ConcurrentMarkThread* thread) :
_timer(thread->cm(), lookup_concurrent_phase_title(phase)),
_manager(phase, thread)
{ }
};
const char* const* ConcurrentMarkThread::concurrent_phases() const {
const char* const* G1ConcurrentMarkThread::concurrent_phases() const {
return concurrent_phase_names;
}
bool ConcurrentMarkThread::request_concurrent_phase(const char* phase_name) {
bool G1ConcurrentMarkThread::request_concurrent_phase(const char* phase_name) {
int phase = lookup_concurrent_phase(phase_name);
if (phase < 0) return false;
@ -243,7 +243,7 @@ bool ConcurrentMarkThread::request_concurrent_phase(const char* phase_name) {
return true;
}
void ConcurrentMarkThread::run_service() {
void G1ConcurrentMarkThread::run_service() {
_vtime_start = os::elapsedVTime();
G1CollectedHeap* g1h = G1CollectedHeap::heap();
@ -397,12 +397,13 @@ void ConcurrentMarkThread::run_service() {
_cm->root_regions()->cancel_scan();
}
void ConcurrentMarkThread::stop_service() {
void G1ConcurrentMarkThread::stop_service() {
MutexLockerEx ml(CGC_lock, Mutex::_no_safepoint_check_flag);
CGC_lock->notify_all();
}
void ConcurrentMarkThread::sleep_before_next_cycle() {
void G1ConcurrentMarkThread::sleep_before_next_cycle() {
// We join here because we don't want to do the "shouldConcurrentMark()"
// below while the world is otherwise stopped.
assert(!in_progress(), "should have been cleared");

View File

@ -22,8 +22,8 @@
*
*/
#ifndef SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
#define SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
#ifndef SHARE_VM_GC_G1_G1CONCURRENTMARKTHREAD_HPP
#define SHARE_VM_GC_G1_G1CONCURRENTMARKTHREAD_HPP
#include "gc/shared/concurrentGCPhaseManager.hpp"
#include "gc/shared/concurrentGCThread.hpp"
@ -33,7 +33,7 @@ class G1Policy;
// The concurrent mark thread triggers the various steps of the concurrent marking
// cycle, including various marking cleanup.
class ConcurrentMarkThread: public ConcurrentGCThread {
class G1ConcurrentMarkThread: public ConcurrentGCThread {
friend class VMStructs;
double _vtime_start; // Initial virtual time.
@ -63,7 +63,7 @@ class ConcurrentMarkThread: public ConcurrentGCThread {
public:
// Constructor
ConcurrentMarkThread(G1ConcurrentMark* cm);
G1ConcurrentMarkThread(G1ConcurrentMark* cm);
// Total virtual time so far for this thread and concurrent marking tasks.
double vtime_accum();
@ -98,4 +98,4 @@ class ConcurrentMarkThread: public ConcurrentGCThread {
}
};
#endif // SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_HPP
#endif // SHARE_VM_GC_G1_G1CONCURRENTMARKTHREAD_HPP

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -22,20 +22,20 @@
*
*/
#ifndef SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_INLINE_HPP
#define SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_INLINE_HPP
#ifndef SHARE_VM_GC_G1_G1CONCURRENTMARKTHREAD_INLINE_HPP
#define SHARE_VM_GC_G1_G1CONCURRENTMARKTHREAD_INLINE_HPP
#include "gc/g1/concurrentMarkThread.hpp"
#include "gc/g1/g1ConcurrentMark.hpp"
#include "gc/g1/g1ConcurrentMarkThread.hpp"
// Total virtual time so far.
inline double ConcurrentMarkThread::vtime_accum() {
inline double G1ConcurrentMarkThread::vtime_accum() {
return _vtime_accum + _cm->all_task_accum_vtime();
}
// Marking virtual time so far
inline double ConcurrentMarkThread::vtime_mark_accum() {
inline double G1ConcurrentMarkThread::vtime_mark_accum() {
return _vtime_mark_accum + _cm->all_task_accum_vtime();
}
#endif // SHARE_VM_GC_G1_CONCURRENTMARKTHREAD_INLINE_HPP
#endif // SHARE_VM_GC_G1_G1CONCURRENTMARKTHREAD_INLINE_HPP

View File

@ -23,10 +23,10 @@
*/
#include "precompiled.hpp"
#include "gc/g1/concurrentMarkThread.hpp"
#include "gc/g1/g1Allocator.inline.hpp"
#include "gc/g1/g1CollectedHeap.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1ConcurrentMarkThread.hpp"
#include "gc/g1/g1HeapVerifier.hpp"
#include "gc/g1/g1Policy.hpp"
#include "gc/g1/g1RemSet.hpp"

View File

@ -23,11 +23,11 @@
*/
#include "precompiled.hpp"
#include "gc/g1/concurrentMarkThread.inline.hpp"
#include "gc/g1/g1Analytics.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1CollectionSet.hpp"
#include "gc/g1/g1ConcurrentMark.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/g1/g1ConcurrentRefine.hpp"
#include "gc/g1/g1HotCardCache.hpp"
#include "gc/g1/g1IHOPControl.hpp"

View File

@ -23,8 +23,8 @@
*/
#include "precompiled.hpp"
#include "gc/g1/concurrentMarkThread.inline.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/g1/g1Policy.hpp"
#include "gc/shared/gcId.hpp"
#include "gc/g1/vm_operations_g1.hpp"

View File

@ -73,9 +73,9 @@
#include "prims/cdsoffsets.hpp"
#endif // INCLUDE_CDS
#if INCLUDE_ALL_GCS
#include "gc/g1/concurrentMarkThread.hpp"
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1ConcurrentMark.hpp"
#include "gc/g1/g1ConcurrentMarkThread.hpp"
#include "gc/g1/heapRegionRemSet.hpp"
#include "gc/parallel/parallelScavengeHeap.inline.hpp"
#include "gc/parallel/adjoiningGenerations.hpp"

View File

@ -114,7 +114,7 @@
#include "utilities/vmError.hpp"
#if INCLUDE_ALL_GCS
#include "gc/cms/concurrentMarkSweepThread.hpp"
#include "gc/g1/concurrentMarkThread.inline.hpp"
#include "gc/g1/g1ConcurrentMarkThread.inline.hpp"
#include "gc/parallel/pcTasks.hpp"
#endif // INCLUDE_ALL_GCS
#if INCLUDE_JVMCI