mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-19 01:47:52 +00:00
8200626: Restore history for g1ConcurrentMarkThread.*
Reviewed-by: shade, sjohanss
This commit is contained in:
parent
b938ae51ce
commit
b025fab0d2
@ -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"
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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; }
|
||||
|
||||
@ -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");
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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"
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user