mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-27 22:02:25 +00:00
8377165: G1: Introduce common G1 GC Mark to collect scoped objects
Reviewed-by: iwalulya, ayang
This commit is contained in:
parent
ee5b10c7f0
commit
a7bf468a8f
@ -138,6 +138,26 @@ void G1RegionMappingChangedListener::on_commit(uint start_idx, size_t num_region
|
||||
reset_from_card_cache(start_idx, num_regions);
|
||||
}
|
||||
|
||||
// Collects commonly used scoped objects that are related to initial setup.
|
||||
class G1GCMark : StackObj {
|
||||
ResourceMark _rm;
|
||||
IsSTWGCActiveMark _active_gc_mark;
|
||||
GCIdMark _gc_id_mark;
|
||||
SvcGCMarker _sgcm;
|
||||
GCTraceCPUTime _tcpu;
|
||||
|
||||
public:
|
||||
G1GCMark(GCTracer* tracer, bool is_full_gc) :
|
||||
_rm(),
|
||||
_active_gc_mark(),
|
||||
_gc_id_mark(),
|
||||
_sgcm(is_full_gc ? SvcGCMarker::FULL : SvcGCMarker::MINOR),
|
||||
_tcpu(tracer) {
|
||||
|
||||
assert_at_safepoint_on_vm_thread();
|
||||
}
|
||||
};
|
||||
|
||||
void G1CollectedHeap::run_batch_task(G1BatchedTask* cl) {
|
||||
uint num_workers = MAX2(1u, MIN2(cl->num_workers_estimate(), workers()->active_workers()));
|
||||
cl->set_max_workers(num_workers);
|
||||
@ -914,12 +934,11 @@ void G1CollectedHeap::verify_after_full_collection() {
|
||||
void G1CollectedHeap::do_full_collection(size_t allocation_word_size,
|
||||
bool clear_all_soft_refs,
|
||||
bool do_maximal_compaction) {
|
||||
assert_at_safepoint_on_vm_thread();
|
||||
|
||||
G1FullGCMark gc_mark;
|
||||
G1FullGCTracer tracer;
|
||||
G1GCMark gc_mark(&tracer, true /* is_full_gc */);
|
||||
GCTraceTime(Info, gc) tm("Pause Full", nullptr, gc_cause(), true);
|
||||
G1FullCollector collector(this, clear_all_soft_refs, do_maximal_compaction, gc_mark.tracer());
|
||||
|
||||
G1FullCollector collector(this, clear_all_soft_refs, do_maximal_compaction, &tracer);
|
||||
collector.prepare_collection();
|
||||
collector.collect();
|
||||
collector.complete_collection(allocation_word_size);
|
||||
@ -2714,16 +2733,7 @@ void G1CollectedHeap::flush_region_pin_cache() {
|
||||
}
|
||||
|
||||
void G1CollectedHeap::do_collection_pause_at_safepoint(size_t allocation_word_size) {
|
||||
assert_at_safepoint_on_vm_thread();
|
||||
assert(!is_stw_gc_active(), "collection is not reentrant");
|
||||
|
||||
ResourceMark rm;
|
||||
|
||||
IsSTWGCActiveMark active_gc_mark;
|
||||
GCIdMark gc_id_mark;
|
||||
SvcGCMarker sgcm(SvcGCMarker::MINOR);
|
||||
|
||||
GCTraceCPUTime tcpu(_gc_tracer_stw);
|
||||
G1GCMark gcm(_gc_tracer_stw, false /* is_full_gc */);
|
||||
|
||||
_bytes_used_during_gc = 0;
|
||||
|
||||
|
||||
@ -110,7 +110,7 @@ uint G1FullCollector::calc_active_workers() {
|
||||
G1FullCollector::G1FullCollector(G1CollectedHeap* heap,
|
||||
bool clear_soft_refs,
|
||||
bool do_maximal_compaction,
|
||||
G1FullGCTracer* tracer) :
|
||||
GCTracer* tracer) :
|
||||
_heap(heap),
|
||||
_scope(heap->monitoring_support(), clear_soft_refs, do_maximal_compaction, tracer),
|
||||
_num_workers(calc_active_workers()),
|
||||
|
||||
@ -58,18 +58,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
// Full GC Mark that holds GC id and CPU time trace. Needs to be separate
|
||||
// from the G1FullCollector and G1FullGCScope to allow the Full GC logging
|
||||
// to have the same structure as the Young GC logging.
|
||||
class G1FullGCMark : StackObj {
|
||||
GCIdMark _gc_id;
|
||||
G1FullGCTracer _tracer;
|
||||
GCTraceCPUTime _cpu_time;
|
||||
public:
|
||||
G1FullGCMark() : _gc_id(), _tracer(), _cpu_time(&_tracer) { }
|
||||
G1FullGCTracer* tracer() { return &_tracer; }
|
||||
};
|
||||
|
||||
// The G1FullCollector holds data associated with the current Full GC.
|
||||
class G1FullCollector : StackObj {
|
||||
G1CollectedHeap* _heap;
|
||||
@ -102,7 +90,7 @@ public:
|
||||
G1FullCollector(G1CollectedHeap* heap,
|
||||
bool clear_soft_refs,
|
||||
bool do_maximal_compaction,
|
||||
G1FullGCTracer* tracer);
|
||||
GCTracer* tracer);
|
||||
~G1FullCollector();
|
||||
|
||||
void prepare_collection();
|
||||
|
||||
@ -38,14 +38,11 @@ G1FullGCJFRTracerMark::~G1FullGCJFRTracerMark() {
|
||||
G1FullGCScope::G1FullGCScope(G1MonitoringSupport* monitoring_support,
|
||||
bool clear_soft,
|
||||
bool do_maximal_compaction,
|
||||
G1FullGCTracer* tracer) :
|
||||
_rm(),
|
||||
GCTracer* tracer) :
|
||||
_should_clear_soft_refs(clear_soft),
|
||||
_do_maximal_compaction(do_maximal_compaction),
|
||||
_svc_marker(SvcGCMarker::FULL),
|
||||
_timer(),
|
||||
_tracer(tracer),
|
||||
_active(),
|
||||
_tracer_mark(&_timer, _tracer),
|
||||
_monitoring_scope(monitoring_support),
|
||||
_heap_printer(G1CollectedHeap::heap()),
|
||||
@ -57,7 +54,7 @@ STWGCTimer* G1FullGCScope::timer() {
|
||||
return &_timer;
|
||||
}
|
||||
|
||||
G1FullGCTracer* G1FullGCScope::tracer() {
|
||||
GCTracer* G1FullGCScope::tracer() {
|
||||
return _tracer;
|
||||
}
|
||||
|
||||
|
||||
@ -46,13 +46,10 @@ public:
|
||||
|
||||
// Class used to group scoped objects used in the Full GC together.
|
||||
class G1FullGCScope : public StackObj {
|
||||
ResourceMark _rm;
|
||||
bool _should_clear_soft_refs;
|
||||
bool _do_maximal_compaction;
|
||||
SvcGCMarker _svc_marker;
|
||||
STWGCTimer _timer;
|
||||
G1FullGCTracer* _tracer;
|
||||
IsSTWGCActiveMark _active;
|
||||
GCTracer* _tracer;
|
||||
G1FullGCJFRTracerMark _tracer_mark;
|
||||
G1FullGCMonitoringScope _monitoring_scope;
|
||||
G1HeapPrinterMark _heap_printer;
|
||||
@ -62,13 +59,13 @@ public:
|
||||
G1FullGCScope(G1MonitoringSupport* monitoring_support,
|
||||
bool clear_soft,
|
||||
bool do_maximal_compaction,
|
||||
G1FullGCTracer* tracer);
|
||||
GCTracer* tracer);
|
||||
|
||||
bool should_clear_soft_refs() const { return _should_clear_soft_refs; }
|
||||
bool do_maximal_compaction() { return _do_maximal_compaction; }
|
||||
|
||||
STWGCTimer* timer();
|
||||
G1FullGCTracer* tracer();
|
||||
GCTracer* tracer();
|
||||
size_t region_compaction_threshold() const;
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user