# HG changeset patch # User pliden # Date 1533806670 -7200 # Node ID da5b0111c93c91506eec1ab5efc8780994c5e9ca # Parent 2b3b7db9b88912eeec4b4ce68bff90cb359a8def 8207756: ZGC: jstat should show CGC STW phases Reviewed-by: pliden, ysuenaga, eosterlund Contributed-by: yasuenag@gmail.com, per.liden@oracle.com diff -r 2b3b7db9b889 -r da5b0111c93c src/hotspot/share/gc/shared/vmGCOperations.hpp --- a/src/hotspot/share/gc/shared/vmGCOperations.hpp Thu Aug 09 15:42:48 2018 +0800 +++ b/src/hotspot/share/gc/shared/vmGCOperations.hpp Thu Aug 09 11:24:30 2018 +0200 @@ -227,7 +227,7 @@ private: JvmtiGCMarker _jgcm; public: - typedef enum { MINOR, FULL, CONCURRENT, OTHER } reason_type; + typedef enum { MINOR, FULL, CONCURRENT } reason_type; SvcGCMarker(reason_type reason ) { VM_GC_Operation::notify_gc_begin(reason == FULL); diff -r 2b3b7db9b889 -r da5b0111c93c src/hotspot/share/gc/z/zDriver.cpp --- a/src/hotspot/share/gc/z/zDriver.cpp Thu Aug 09 15:42:48 2018 +0800 +++ b/src/hotspot/share/gc/z/zDriver.cpp Thu Aug 09 11:24:30 2018 +0200 @@ -98,7 +98,7 @@ ZStatSample(ZSamplerJavaThreads, Threads::number_of_threads()); // JVMTI support - SvcGCMarker sgcm(SvcGCMarker::OTHER); + SvcGCMarker sgcm(SvcGCMarker::CONCURRENT); // Setup GC id GCIdMark gcid(_gc_id); diff -r 2b3b7db9b889 -r da5b0111c93c src/hotspot/share/gc/z/zServiceability.cpp --- a/src/hotspot/share/gc/z/zServiceability.cpp Thu Aug 09 15:42:48 2018 +0800 +++ b/src/hotspot/share/gc/z/zServiceability.cpp Thu Aug 09 11:24:30 2018 +0200 @@ -33,13 +33,13 @@ class ZOldGenerationCounters : public GenerationCounters { public: ZOldGenerationCounters(const char* name, size_t min_capacity, size_t max_capacity) : - // The "1, 1" parameters are for the n-th generation (=1) with 1 space. - GenerationCounters(name, - 1 /* ordinal */, - 1 /* spaces */, - min_capacity /* min_capacity */, - max_capacity /* max_capacity */, - min_capacity /* curr_capacity */) {} + // The "1, 1" parameters are for the n-th generation (=1) with 1 space. + GenerationCounters(name, + 1 /* ordinal */, + 1 /* spaces */, + min_capacity /* min_capacity */, + max_capacity /* max_capacity */, + min_capacity /* curr_capacity */) {} virtual void update_all() { size_t committed = ZHeap::heap()->capacity(); @@ -50,26 +50,36 @@ // Class to expose perf counters used by jstat. class ZServiceabilityCounters : public CHeapObj { private: - ZOldGenerationCounters _old_collection_counters; + ZOldGenerationCounters _old_generation_counters; HSpaceCounters _old_space_counters; + CollectorCounters _collector_counters; public: ZServiceabilityCounters(size_t min_capacity, size_t max_capacity); + CollectorCounters* collector_counters(); + void update_sizes(); }; ZServiceabilityCounters::ZServiceabilityCounters(size_t min_capacity, size_t max_capacity) : // generation.1 - _old_collection_counters("old", + _old_generation_counters("old", min_capacity, max_capacity), // generation.1.space.0 - _old_space_counters(_old_collection_counters.name_space(), + _old_space_counters(_old_generation_counters.name_space(), "space", 0 /* ordinal */, max_capacity /* max_capacity */, - min_capacity /* init_capacity */) {} + min_capacity /* init_capacity */), + // gc.collector.2 + _collector_counters("stop-the-world", + 2 /* ordinal */) {} + +CollectorCounters* ZServiceabilityCounters::collector_counters() { + return &_collector_counters; +} void ZServiceabilityCounters::update_sizes() { if (UsePerfData) { @@ -79,7 +89,7 @@ _old_space_counters.update_capacity(capacity); _old_space_counters.update_used(used); - _old_collection_counters.update_all(); + _old_generation_counters.update_all(); MetaspaceCounters::update_performance_counters(); CompressedClassSpaceCounters::update_performance_counters(); @@ -147,10 +157,8 @@ is_gc_end /* recordGCEndTime */, is_gc_end /* countCollection */) {} -ZServiceabilityCountersTracer::ZServiceabilityCountersTracer() { - // Nothing to trace with TraceCollectorStats, since ZGC has - // neither a young collector nor a full collector. -} +ZServiceabilityCountersTracer::ZServiceabilityCountersTracer() : + _stats(ZHeap::heap()->serviceability_counters()->collector_counters()) {} ZServiceabilityCountersTracer::~ZServiceabilityCountersTracer() { ZHeap::heap()->serviceability_counters()->update_sizes(); diff -r 2b3b7db9b889 -r da5b0111c93c src/hotspot/share/gc/z/zServiceability.hpp --- a/src/hotspot/share/gc/z/zServiceability.hpp Thu Aug 09 15:42:48 2018 +0800 +++ b/src/hotspot/share/gc/z/zServiceability.hpp Thu Aug 09 11:24:30 2018 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 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 @@ -24,6 +24,7 @@ #ifndef SHARE_GC_Z_ZSERVICEABILITY_HPP #define SHARE_GC_Z_ZSERVICEABILITY_HPP +#include "gc/shared/collectorCounters.hpp" #include "memory/allocation.hpp" #include "services/memoryManager.hpp" #include "services/memoryPool.hpp" @@ -76,6 +77,9 @@ }; class ZServiceabilityCountersTracer { +private: + TraceCollectorStats _stats; + public: ZServiceabilityCountersTracer(); ~ZServiceabilityCountersTracer();