--- old/src/share/classes/java/lang/management/PlatformComponent.java 2019-01-29 10:58:22.867806637 +0800 +++ new/src/share/classes/java/lang/management/PlatformComponent.java 2019-01-29 10:58:22.680812119 +0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2019, 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 @@ -37,10 +37,13 @@ import com.sun.management.HotSpotDiagnosticMXBean; import com.sun.management.UnixOperatingSystemMXBean; +import com.sun.management.VMOption; import sun.management.ManagementFactoryHelper; import sun.management.Util; +import jdk.management.jfr.FlightRecorderMXBean; + /** * This enum class defines the list of platform components * that provides monitoring and management support. @@ -270,8 +273,28 @@ public List getMXBeans() { return Collections.singletonList(ManagementFactoryHelper.getDiagnosticMXBean()); } - }); + }), + /** + * Flight Recorder. + */ + FLIGHT_RECORDER( + "jdk.management.jfr.FlightRecorderMXBean", + "jdk.management.jfr", "FlightRecorder", defaultKeyProperties(), + true, + new MXBeanFetcher() { + public List getMXBeans() { + HotSpotDiagnosticMXBean hsDiagMBean = ManagementFactoryHelper.getDiagnosticMXBean(); + VMOption opt = hsDiagMBean.getVMOption("EnableJFR"); + if (Boolean.valueOf(opt.getValue())) { + FlightRecorderMXBean m = ManagementFactoryHelper.getFlightRecorderMXBean(); + if (m != null) { + return Collections.singletonList(m); + } + } + return Collections.emptyList(); + } + }); /** * A task that returns the MXBeans for a component. @@ -379,9 +402,10 @@ T getSingletonMXBean(Class mxbeanInterface) { - if (!singleton) + if (!singleton) { throw new IllegalArgumentException(mxbeanInterfaceName + " can have zero or more than one instances"); + } List list = getMXBeans(mxbeanInterface); assert list.size() == 1; @@ -392,9 +416,10 @@ T getSingletonMXBean(MBeanServerConnection mbs, Class mxbeanInterface) throws java.io.IOException { - if (!singleton) + if (!singleton) { throw new IllegalArgumentException(mxbeanInterfaceName + " can have zero or more than one instances"); + } // ObjectName of a singleton MXBean contains only domain and type assert keyProperties.size() == 1; @@ -459,8 +484,9 @@ ensureInitialized(); String cn = mxbeanInterface.getName(); PlatformComponent pc = enumMap.get(cn); - if (pc != null && pc.getMXBeanInterface() == mxbeanInterface) + if (pc != null && pc.getMXBeanInterface() == mxbeanInterface) { return pc; + } return null; }