mirror of
https://github.com/openjdk/jdk.git
synced 2026-06-10 04:25:35 +00:00
8386204: GenShen: Bootstrap cycles are misidentified in logs
This commit is contained in:
parent
7f62474fcb
commit
b667c2c080
@ -45,19 +45,19 @@
|
||||
#include "runtime/vmThread.hpp"
|
||||
#include "utilities/events.hpp"
|
||||
|
||||
ShenandoahDegenGC::ShenandoahDegenGC(ShenandoahDegenPoint degen_point, ShenandoahGeneration* generation) :
|
||||
ShenandoahDegenGC::ShenandoahDegenGC(ShenandoahDegenPoint degen_point, ShenandoahGeneration* generation, bool do_old_gc_bootstrap) :
|
||||
ShenandoahGC(generation),
|
||||
_degen_point(degen_point),
|
||||
_abbreviated(false) {
|
||||
_abbreviated(false),
|
||||
_do_old_gc_bootstrap(do_old_gc_bootstrap) {
|
||||
}
|
||||
|
||||
bool ShenandoahDegenGC::collect(GCCause::Cause cause) {
|
||||
vmop_degenerated();
|
||||
ShenandoahHeap* heap = ShenandoahHeap::heap();
|
||||
if (heap->mode()->is_generational()) {
|
||||
bool is_bootstrap_gc = heap->young_generation()->is_bootstrap_cycle();
|
||||
FormatBuffer<32> buf("Degenerated %s GC", _generation->name());
|
||||
const char* msg = is_bootstrap_gc ? "Degenerated Bootstrap Old GC" : buf.buffer();
|
||||
const char* msg = _do_old_gc_bootstrap ? "Degenerated Bootstrap Old GC" : buf.buffer();
|
||||
heap->mmu_tracker()->record_degenerated(GCId::current(), msg);
|
||||
heap->log_heap_status(FormatBuffer<64>("At end of %s", msg));
|
||||
}
|
||||
|
||||
@ -35,9 +35,10 @@ class ShenandoahDegenGC : public ShenandoahGC {
|
||||
private:
|
||||
const ShenandoahDegenPoint _degen_point;
|
||||
bool _abbreviated;
|
||||
const bool _do_old_gc_bootstrap;
|
||||
|
||||
public:
|
||||
ShenandoahDegenGC(ShenandoahDegenPoint degen_point, ShenandoahGeneration* generation);
|
||||
ShenandoahDegenGC(ShenandoahDegenPoint degen_point, ShenandoahGeneration* generation, bool do_old_gc_bootstrap = false);
|
||||
bool collect(GCCause::Cause cause) override;
|
||||
|
||||
private:
|
||||
|
||||
@ -53,7 +53,8 @@ ShenandoahGenerationalControlThread::ShenandoahGenerationalControlThread() :
|
||||
_requested_generation(nullptr),
|
||||
_gc_mode(none),
|
||||
_degen_point(ShenandoahGC::_degenerated_unset),
|
||||
_heap(ShenandoahGenerationalHeap::heap()) {
|
||||
_heap(ShenandoahGenerationalHeap::heap()),
|
||||
_do_old_gc_bootstrap(false) {
|
||||
shenandoah_assert_generational();
|
||||
set_name("ShenControl");
|
||||
create_and_start();
|
||||
@ -529,12 +530,14 @@ void ShenandoahGenerationalControlThread::service_concurrent_cycle(ShenandoahGen
|
||||
|
||||
assert(!generation->is_old(), "Old GC takes a different control path");
|
||||
|
||||
_do_old_gc_bootstrap = do_old_gc_bootstrap;
|
||||
ShenandoahConcurrentGC gc(generation, do_old_gc_bootstrap);
|
||||
_heap->increment_total_collections(false);
|
||||
if (gc.collect(cause)) {
|
||||
// Cycle is complete
|
||||
_heap->notify_gc_progress();
|
||||
generation->record_success_concurrent(gc.abbreviated());
|
||||
_do_old_gc_bootstrap = false;
|
||||
} else {
|
||||
assert(_heap->cancelled_gc(), "Must have been cancelled");
|
||||
check_cancellation_or_degen(gc.degen_point());
|
||||
@ -613,9 +616,10 @@ void ShenandoahGenerationalControlThread::service_stw_degenerated_cycle(const Sh
|
||||
|
||||
ShenandoahGCSession session(request.cause, request.generation, true,
|
||||
_degen_point == ShenandoahGC::ShenandoahDegenPoint::_degenerated_outside_cycle);
|
||||
ShenandoahDegenGC gc(_degen_point, request.generation);
|
||||
ShenandoahDegenGC gc(_degen_point, request.generation, _do_old_gc_bootstrap);
|
||||
gc.collect(request.cause);
|
||||
_degen_point = ShenandoahGC::_degenerated_unset;
|
||||
_do_old_gc_bootstrap = false;
|
||||
|
||||
assert(_heap->young_generation()->task_queues()->is_empty(), "Unexpected young generation marking tasks");
|
||||
if (request.generation->is_global()) {
|
||||
|
||||
@ -84,6 +84,9 @@ private:
|
||||
// preparing for mark).
|
||||
ShenandoahSharedFlag _allow_old_preemption;
|
||||
|
||||
// True while the current cycle is the bootstrap of an old GC.
|
||||
bool _do_old_gc_bootstrap;
|
||||
|
||||
public:
|
||||
ShenandoahGenerationalControlThread();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user