--- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp Fri Nov 24 15:21:30 2017 +0100
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp Fri Nov 24 15:48:01 2017 +0100
@@ -42,11 +42,11 @@
#include "gc/g1/g1SATBCardTableModRefBS.hpp"
#include "gc/g1/g1SurvivorRegions.hpp"
#include "gc/g1/g1YCTypes.hpp"
-#include "gc/g1/hSpaceCounters.hpp"
#include "gc/g1/heapRegionManager.hpp"
#include "gc/g1/heapRegionSet.hpp"
#include "gc/shared/barrierSet.hpp"
#include "gc/shared/collectedHeap.hpp"
+#include "gc/shared/gcHeapSummary.hpp"
#include "gc/shared/plab.hpp"
#include "gc/shared/preservedMarks.hpp"
#include "memory/memRegion.hpp"
--- a/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp Fri Nov 24 15:21:30 2017 +0100
+++ b/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp Fri Nov 24 15:48:01 2017 +0100
@@ -26,6 +26,7 @@
#include "gc/g1/g1CollectedHeap.inline.hpp"
#include "gc/g1/g1MonitoringSupport.hpp"
#include "gc/g1/g1Policy.hpp"
+#include "gc/shared/hSpaceCounters.hpp"
G1GenerationCounters::G1GenerationCounters(G1MonitoringSupport* g1mm,
const char* name,
@@ -128,10 +129,10 @@
// name "generation.1.space.0"
// Counters are created from maxCapacity, capacity, initCapacity,
// and used.
- _old_space_counters = new HSpaceCounters("space", 0 /* ordinal */,
+ _old_space_counters = new HSpaceCounters(_old_collection_counters->name_space(),
+ "space", 0 /* ordinal */,
pad_capacity(overall_reserved()) /* max_capacity */,
- pad_capacity(old_space_committed()) /* init_capacity */,
- _old_collection_counters);
+ pad_capacity(old_space_committed()) /* init_capacity */);
// Young collection set
// name "generation.0". This is logically the young generation.
@@ -139,27 +140,29 @@
// See _old_collection_counters for additional counters
_young_collection_counters = new G1YoungGenerationCounters(this, "young");
+ const char* young_collection_name_space = _young_collection_counters->name_space();
+
// name "generation.0.space.0"
// See _old_space_counters for additional counters
- _eden_counters = new HSpaceCounters("eden", 0 /* ordinal */,
+ _eden_counters = new HSpaceCounters(young_collection_name_space,
+ "eden", 0 /* ordinal */,
pad_capacity(overall_reserved()) /* max_capacity */,
- pad_capacity(eden_space_committed()) /* init_capacity */,
- _young_collection_counters);
+ pad_capacity(eden_space_committed()) /* init_capacity */);
// name "generation.0.space.1"
// See _old_space_counters for additional counters
// Set the arguments to indicate that this survivor space is not used.
- _from_counters = new HSpaceCounters("s0", 1 /* ordinal */,
+ _from_counters = new HSpaceCounters(young_collection_name_space,
+ "s0", 1 /* ordinal */,
pad_capacity(0) /* max_capacity */,
- pad_capacity(0) /* init_capacity */,
- _young_collection_counters);
+ pad_capacity(0) /* init_capacity */);
// name "generation.0.space.2"
// See _old_space_counters for additional counters
- _to_counters = new HSpaceCounters("s1", 2 /* ordinal */,
+ _to_counters = new HSpaceCounters(young_collection_name_space,
+ "s1", 2 /* ordinal */,
pad_capacity(overall_reserved()) /* max_capacity */,
- pad_capacity(survivor_space_committed()) /* init_capacity */,
- _young_collection_counters);
+ pad_capacity(survivor_space_committed()) /* init_capacity */);
if (UsePerfData) {
// Given that this survivor space is not used, we update it here
--- a/src/hotspot/share/gc/g1/g1MonitoringSupport.hpp Fri Nov 24 15:21:30 2017 +0100
+++ b/src/hotspot/share/gc/g1/g1MonitoringSupport.hpp Fri Nov 24 15:48:01 2017 +0100
@@ -25,9 +25,11 @@
#ifndef SHARE_VM_GC_G1_G1MONITORINGSUPPORT_HPP
#define SHARE_VM_GC_G1_G1MONITORINGSUPPORT_HPP
-#include "gc/g1/hSpaceCounters.hpp"
+#include "gc/shared/generationCounters.hpp"
+class CollectorCounters;
class G1CollectedHeap;
+class HSpaceCounters;
// Class for monitoring logical spaces in G1. It provides data for
// both G1's jstat counters as well as G1's memory pools.
--- a/src/hotspot/share/gc/g1/hSpaceCounters.cpp Fri Nov 24 15:21:30 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2011, 2015, 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
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#include "precompiled.hpp"
-#include "gc/g1/hSpaceCounters.hpp"
-#include "gc/shared/generation.hpp"
-#include "memory/resourceArea.hpp"
-
-HSpaceCounters::HSpaceCounters(const char* name,
- int ordinal,
- size_t max_size,
- size_t initial_capacity,
- GenerationCounters* gc) {
-
- if (UsePerfData) {
- EXCEPTION_MARK;
- ResourceMark rm;
-
- const char* cns =
- PerfDataManager::name_space(gc->name_space(), "space", ordinal);
-
- _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC);
- strcpy(_name_space, cns);
-
- const char* cname = PerfDataManager::counter_name(_name_space, "name");
- PerfDataManager::create_string_constant(SUN_GC, cname, name, CHECK);
-
- cname = PerfDataManager::counter_name(_name_space, "maxCapacity");
- PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
- (jlong)max_size, CHECK);
-
- cname = PerfDataManager::counter_name(_name_space, "capacity");
- _capacity = PerfDataManager::create_variable(SUN_GC, cname,
- PerfData::U_Bytes,
- initial_capacity, CHECK);
-
- cname = PerfDataManager::counter_name(_name_space, "used");
- _used = PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
- (jlong) 0, CHECK);
-
- cname = PerfDataManager::counter_name(_name_space, "initCapacity");
- PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
- initial_capacity, CHECK);
- }
-}
--- a/src/hotspot/share/gc/g1/hSpaceCounters.hpp Fri Nov 24 15:21:30 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 2011, 2015, 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
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-
-#ifndef SHARE_VM_GC_G1_HSPACECOUNTERS_HPP
-#define SHARE_VM_GC_G1_HSPACECOUNTERS_HPP
-
-#include "gc/shared/generation.hpp"
-#include "gc/shared/generationCounters.hpp"
-#include "runtime/perfData.hpp"
-#include "utilities/macros.hpp"
-
-// A HSpaceCounter is a holder class for performance counters
-// that track a collections (logical spaces) in a heap;
-
-class HeapSpaceUsedHelper;
-class G1SpaceMonitoringSupport;
-
-class HSpaceCounters: public CHeapObj<mtGC> {
- friend class VMStructs;
-
- private:
- PerfVariable* _capacity;
- PerfVariable* _used;
-
- // Constant PerfData types don't need to retain a reference.
- // However, it's a good idea to document them here.
-
- char* _name_space;
-
- public:
-
- HSpaceCounters(const char* name, int ordinal, size_t max_size,
- size_t initial_capacity, GenerationCounters* gc);
-
- ~HSpaceCounters() {
- if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space);
- }
-
- inline void update_capacity(size_t v) {
- _capacity->set_value(v);
- }
-
- inline void update_used(size_t v) {
- _used->set_value(v);
- }
-
- debug_only(
- // for security reasons, we do not allow arbitrary reads from
- // the counters as they may live in shared memory.
- jlong used() {
- return _used->get_value();
- }
- jlong capacity() {
- return _used->get_value();
- }
- )
-
- inline void update_all(size_t capacity, size_t used) {
- update_capacity(capacity);
- update_used(used);
- }
-
- const char* name_space() const { return _name_space; }
-};
-#endif // SHARE_VM_GC_G1_HSPACECOUNTERS_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shared/hSpaceCounters.cpp Fri Nov 24 15:48:01 2017 +0100
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2011, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#include "precompiled.hpp"
+#include "gc/shared/hSpaceCounters.hpp"
+#include "memory/allocation.hpp"
+#include "memory/resourceArea.hpp"
+#include "runtime/perfData.hpp"
+
+HSpaceCounters::HSpaceCounters(const char* name_space,
+ const char* name,
+ int ordinal,
+ size_t max_size,
+ size_t initial_capacity) {
+
+ if (UsePerfData) {
+ EXCEPTION_MARK;
+ ResourceMark rm;
+
+ const char* cns =
+ PerfDataManager::name_space(name_space, "space", ordinal);
+
+ _name_space = NEW_C_HEAP_ARRAY(char, strlen(cns)+1, mtGC);
+ strcpy(_name_space, cns);
+
+ const char* cname = PerfDataManager::counter_name(_name_space, "name");
+ PerfDataManager::create_string_constant(SUN_GC, cname, name, CHECK);
+
+ cname = PerfDataManager::counter_name(_name_space, "maxCapacity");
+ PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
+ (jlong)max_size, CHECK);
+
+ cname = PerfDataManager::counter_name(_name_space, "capacity");
+ _capacity = PerfDataManager::create_variable(SUN_GC, cname,
+ PerfData::U_Bytes,
+ initial_capacity, CHECK);
+
+ cname = PerfDataManager::counter_name(_name_space, "used");
+ _used = PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
+ (jlong) 0, CHECK);
+
+ cname = PerfDataManager::counter_name(_name_space, "initCapacity");
+ PerfDataManager::create_constant(SUN_GC, cname, PerfData::U_Bytes,
+ initial_capacity, CHECK);
+ }
+}
+
+HSpaceCounters::~HSpaceCounters() {
+ if (_name_space != NULL) {
+ FREE_C_HEAP_ARRAY(char, _name_space);
+ }
+}
+
+void HSpaceCounters::update_capacity(size_t v) {
+ _capacity->set_value(v);
+}
+
+void HSpaceCounters::update_used(size_t v) {
+ _used->set_value(v);
+}
+
+void HSpaceCounters::update_all(size_t capacity, size_t used) {
+ update_capacity(capacity);
+ update_used(used);
+}
+
+debug_only(
+ // for security reasons, we do not allow arbitrary reads from
+ // the counters as they may live in shared memory.
+ jlong HSpaceCounters::used() {
+ return _used->get_value();
+ }
+ jlong HSpaceCounters::capacity() {
+ return _used->get_value();
+ }
+)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/gc/shared/hSpaceCounters.hpp Fri Nov 24 15:48:01 2017 +0100
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2011, 2017, 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
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+#ifndef SHARE_VM_GC_SHARED_HSPACECOUNTERS_HPP
+#define SHARE_VM_GC_SHARED_HSPACECOUNTERS_HPP
+
+#include "memory/allocation.hpp"
+#include "runtime/perfData.hpp"
+#include "utilities/macros.hpp"
+
+// A HSpaceCounter is a holder class for performance counters
+// that track a collections (logical spaces) in a heap;
+
+class HSpaceCounters: public CHeapObj<mtGC> {
+ friend class VMStructs;
+
+ private:
+ PerfVariable* _capacity;
+ PerfVariable* _used;
+
+ // Constant PerfData types don't need to retain a reference.
+ // However, it's a good idea to document them here.
+
+ char* _name_space;
+
+ public:
+
+ HSpaceCounters(const char* name_space, const char* name, int ordinal,
+ size_t max_size, size_t initial_capacity);
+
+ ~HSpaceCounters();
+
+ void update_capacity(size_t v);
+ void update_used(size_t v);
+
+ void update_all(size_t capacity, size_t used);
+
+ debug_only(
+ // for security reasons, we do not allow arbitrary reads from
+ // the counters as they may live in shared memory.
+ jlong used();
+ jlong capacity();
+ )
+
+ const char* name_space() const { return _name_space; }
+};
+#endif // SHARE_VM_GC_SHARED_HSPACECOUNTERS_HPP