8080345: With perm gen gone, perfdata counter sun.gc.policy.generations should be 2, not 3
Reviewed-by: sjohanss, tschatzl
Contributed-by: ysr1729@gmail.com, erik.helin@oracle.com
--- a/src/hotspot/share/gc/cms/cmsCollectorPolicy.cpp Fri Nov 24 15:48:01 2017 +0100
+++ b/src/hotspot/share/gc/cms/cmsCollectorPolicy.cpp Mon Nov 27 10:51:31 2017 +0100
@@ -71,6 +71,6 @@
}
void ConcurrentMarkSweepPolicy::initialize_gc_policy_counters() {
- // initialize the policy counters - 2 collectors, 3 generations
- _gc_policy_counters = new GCPolicyCounters("ParNew:CMS", 2, 3);
+ // initialize the policy counters - 2 collectors, 2 generations
+ _gc_policy_counters = new GCPolicyCounters("ParNew:CMS", 2, 2);
}
--- a/src/hotspot/share/gc/g1/g1DefaultPolicy.cpp Fri Nov 24 15:48:01 2017 +0100
+++ b/src/hotspot/share/gc/g1/g1DefaultPolicy.cpp Mon Nov 27 10:51:31 2017 +0100
@@ -52,7 +52,7 @@
_analytics(new G1Analytics(&_predictor)),
_mmu_tracker(new G1MMUTrackerQueue(GCPauseIntervalMillis / 1000.0, MaxGCPauseMillis / 1000.0)),
_ihop_control(create_ihop_control(&_predictor)),
- _policy_counters(new GCPolicyCounters("GarbageFirst", 1, 3)),
+ _policy_counters(new GCPolicyCounters("GarbageFirst", 1, 2)),
_young_list_fixed_length(0),
_short_lived_surv_rate_group(new SurvRateGroup()),
_survivor_surv_rate_group(new SurvRateGroup()),
--- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp Fri Nov 24 15:48:01 2017 +0100
+++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp Mon Nov 27 10:51:31 2017 +0100
@@ -105,9 +105,9 @@
(old_gen()->virtual_space()->high_boundary() ==
young_gen()->virtual_space()->low_boundary()),
"Boundaries must meet");
- // initialize the policy counters - 2 collectors, 3 generations
+ // initialize the policy counters - 2 collectors, 2 generations
_gc_policy_counters =
- new PSGCAdaptivePolicyCounters("ParScav:MSC", 2, 3, _size_policy);
+ new PSGCAdaptivePolicyCounters("ParScav:MSC", 2, 2, _size_policy);
// Set up the GCTaskManager
_gc_task_manager = GCTaskManager::create(ParallelGCThreads);
--- a/src/hotspot/share/gc/shared/collectorPolicy.cpp Fri Nov 24 15:48:01 2017 +0100
+++ b/src/hotspot/share/gc/shared/collectorPolicy.cpp Mon Nov 27 10:51:31 2017 +0100
@@ -911,7 +911,7 @@
}
void MarkSweepPolicy::initialize_gc_policy_counters() {
- // Initialize the policy counters - 2 collectors, 3 generations.
- _gc_policy_counters = new GCPolicyCounters("Copy:MSC", 2, 3);
+ // Initialize the policy counters - 2 collectors, 2 generations.
+ _gc_policy_counters = new GCPolicyCounters("Copy:MSC", 2, 2);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/TestGenerationPerfCounter.java Mon Nov 27 10:51:31 2017 +0100
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 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.
+ */
+
+import static jdk.test.lib.Asserts.*;
+import gc.testlibrary.PerfCounter;
+import gc.testlibrary.PerfCounters;
+
+
+/* @test TestGenerationPerfCounter
+ * @bug 8080345
+ * @requires vm.gc=="null"
+ * @library /test/lib /
+ * @summary Tests that the sun.gc.policy.generations returns 2 for all GCs.
+ * @modules java.base/jdk.internal.misc
+ * java.compiler
+ * java.management/sun.management
+ * jdk.internal.jvmstat/sun.jvmstat.monitor
+ * @run main/othervm -XX:+UsePerfData -XX:+UseSerialGC TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseParallelGC TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseG1GC TestGenerationPerfCounter
+ * @run main/othervm -XX:+UsePerfData -XX:+UseConcMarkSweepGC TestGenerationPerfCounter
+ */
+public class TestGenerationPerfCounter {
+ public static void main(String[] args) throws Exception {
+ long numGenerations =
+ PerfCounters.findByName("sun.gc.policy.generations").longValue();
+ assertEQ(numGenerations, 2L);
+ }
+}
--- a/test/hotspot/jtreg/gc/metaspace/PerfCounter.java Fri Nov 24 15:48:01 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2013, 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.
- */
-
-import sun.jvmstat.monitor.Monitor;
-
-/**
- * Represents a performance counter in the JVM.
- *
- * See http://openjdk.java.net/groups/hotspot/docs/Serviceability.html#bjvmstat
- * for more details about performance counters.
- */
-public class PerfCounter {
- private final Monitor monitor;
- private final String name;
-
- PerfCounter(Monitor monitor, String name) {
- this.monitor = monitor;
- this.name = name;
- }
-
- /**
- * Returns the value of this performance counter as a long.
- *
- * @return The long value of this performance counter
- * @throws RuntimeException If the value of the performance counter isn't a long
- */
- public long longValue() {
- Object value = monitor.getValue();
- if (value instanceof Long) {
- return ((Long) value).longValue();
- }
- throw new RuntimeException("Expected " + monitor.getName() + " to have a long value");
- }
-
- /**
- * Returns the name of the performance counter.
- *
- * @return The name of the performance counter.
- */
- public String getName() {
- return name;
- }
-
- @Override
- public String toString() {
- return name;
- }
-}
--- a/test/hotspot/jtreg/gc/metaspace/PerfCounters.java Fri Nov 24 15:48:01 2017 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2013, 2016, 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.
- */
-
-import sun.jvmstat.monitor.Monitor;
-import sun.jvmstat.monitor.MonitorException;
-import sun.jvmstat.monitor.MonitoredHost;
-import sun.jvmstat.monitor.MonitoredVm;
-import sun.jvmstat.monitor.VmIdentifier;
-import jdk.test.lib.process.ProcessTools;
-
-/**
- * PerfCounters can be used to get a performance counter from the currently
- * executing VM.
- *
- * Throws a runtime exception if an error occurs while communicating with the
- * currently executing VM.
- */
-public class PerfCounters {
- private final static MonitoredVm vm;
-
- static {
- try {
- String pid = Long.toString(ProcessTools.getProcessId());
- VmIdentifier vmId = new VmIdentifier(pid);
- MonitoredHost host = MonitoredHost.getMonitoredHost(vmId);
- vm = host.getMonitoredVm(vmId);
- } catch (Exception e) {
- throw new RuntimeException("Could not connect to the VM");
- }
- }
-
- /**
- * Returns the performance counter with the given name.
- *
- * @param name The name of the performance counter.
- * @throws IllegalArgumentException If no counter with the given name exists.
- * @throws MonitorException If an error occurs while communicating with the VM.
- * @return The performance counter with the given name.
- */
- public static PerfCounter findByName(String name)
- throws MonitorException, IllegalArgumentException {
- Monitor m = vm.findByName(name);
- if (m == null) {
- throw new IllegalArgumentException("Did not find a performance counter with name " + name);
- }
- return new PerfCounter(m, name);
- }
-}
--- a/test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java Fri Nov 24 15:48:01 2017 +0100
+++ b/test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java Mon Nov 27 10:51:31 2017 +0100
@@ -32,11 +32,13 @@
import sun.management.ManagementFactoryHelper;
import static jdk.test.lib.Asserts.*;
+import gc.testlibrary.PerfCounter;
+import gc.testlibrary.PerfCounters;
/* @test TestMetaspacePerfCounters
* @bug 8014659
* @requires vm.gc=="null"
- * @library /test/lib
+ * @library /test/lib /
* @summary Tests that performance counters for metaspace and compressed class
* space exists and works.
* @modules java.base/jdk.internal.misc
--- a/test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java Fri Nov 24 15:48:01 2017 +0100
+++ b/test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java Mon Nov 27 10:51:31 2017 +0100
@@ -26,10 +26,12 @@
import jdk.test.lib.Platform;
import static jdk.test.lib.Asserts.*;
+import gc.testlibrary.PerfCounter;
+import gc.testlibrary.PerfCounters;
/* @test TestPerfCountersAndMemoryPools
* @bug 8023476
- * @library /test/lib
+ * @library /test/lib /
* @requires vm.gc.Serial
* @summary Tests that a MemoryPoolMXBeans and PerfCounters for metaspace
* report the same data.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/testlibrary/PerfCounter.java Mon Nov 27 10:51:31 2017 +0100
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2013, 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.
+ */
+
+package gc.testlibrary;
+
+import sun.jvmstat.monitor.Monitor;
+
+/**
+ * Represents a performance counter in the JVM.
+ *
+ * See http://openjdk.java.net/groups/hotspot/docs/Serviceability.html#bjvmstat
+ * for more details about performance counters.
+ */
+public class PerfCounter {
+ private final Monitor monitor;
+ private final String name;
+
+ PerfCounter(Monitor monitor, String name) {
+ this.monitor = monitor;
+ this.name = name;
+ }
+
+ /**
+ * Returns the value of this performance counter as a long.
+ *
+ * @return The long value of this performance counter
+ * @throws RuntimeException If the value of the performance counter isn't a long
+ */
+ public long longValue() {
+ Object value = monitor.getValue();
+ if (value instanceof Long) {
+ return ((Long) value).longValue();
+ }
+ throw new RuntimeException("Expected " + monitor.getName() + " to have a long value");
+ }
+
+ /**
+ * Returns the name of the performance counter.
+ *
+ * @return The name of the performance counter.
+ */
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/hotspot/jtreg/gc/testlibrary/PerfCounters.java Mon Nov 27 10:51:31 2017 +0100
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2013, 2016, 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.
+ */
+
+package gc.testlibrary;
+
+import sun.jvmstat.monitor.Monitor;
+import sun.jvmstat.monitor.MonitorException;
+import sun.jvmstat.monitor.MonitoredHost;
+import sun.jvmstat.monitor.MonitoredVm;
+import sun.jvmstat.monitor.VmIdentifier;
+import jdk.test.lib.process.ProcessTools;
+
+/**
+ * PerfCounters can be used to get a performance counter from the currently
+ * executing VM.
+ *
+ * Throws a runtime exception if an error occurs while communicating with the
+ * currently executing VM.
+ */
+public class PerfCounters {
+ private final static MonitoredVm vm;
+
+ static {
+ try {
+ String pid = Long.toString(ProcessTools.getProcessId());
+ VmIdentifier vmId = new VmIdentifier(pid);
+ MonitoredHost host = MonitoredHost.getMonitoredHost(vmId);
+ vm = host.getMonitoredVm(vmId);
+ } catch (Exception e) {
+ throw new RuntimeException("Could not connect to the VM");
+ }
+ }
+
+ /**
+ * Returns the performance counter with the given name.
+ *
+ * @param name The name of the performance counter.
+ * @throws IllegalArgumentException If no counter with the given name exists.
+ * @throws MonitorException If an error occurs while communicating with the VM.
+ * @return The performance counter with the given name.
+ */
+ public static PerfCounter findByName(String name)
+ throws MonitorException, IllegalArgumentException {
+ Monitor m = vm.findByName(name);
+ if (m == null) {
+ throw new IllegalArgumentException("Did not find a performance counter with name " + name);
+ }
+ return new PerfCounter(m, name);
+ }
+}