# HG changeset patch # User ehelin # Date 1511776291 -3600 # Node ID d64722b0b3715c7ee16880333c95f43de36269b9 # Parent 8a5e8cd321d9c9e7a2248f1fedb80096381379b4 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 diff -r 8a5e8cd321d9 -r d64722b0b371 src/hotspot/share/gc/cms/cmsCollectorPolicy.cpp --- 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); } diff -r 8a5e8cd321d9 -r d64722b0b371 src/hotspot/share/gc/g1/g1DefaultPolicy.cpp --- 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()), diff -r 8a5e8cd321d9 -r d64722b0b371 src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp --- 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); diff -r 8a5e8cd321d9 -r d64722b0b371 src/hotspot/share/gc/shared/collectorPolicy.cpp --- 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); } diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/TestGenerationPerfCounter.java --- /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); + } +} diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/metaspace/PerfCounter.java --- 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; - } -} diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/metaspace/PerfCounters.java --- 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); - } -} diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/metaspace/TestMetaspacePerfCounters.java --- 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 diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/metaspace/TestPerfCountersAndMemoryPools.java --- 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. diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/testlibrary/PerfCounter.java --- /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; + } +} diff -r 8a5e8cd321d9 -r d64722b0b371 test/hotspot/jtreg/gc/testlibrary/PerfCounters.java --- /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); + } +}