diff --git a/src/java.base/share/classes/java/security/Security.java b/src/java.base/share/classes/java/security/Security.java
index 5b9552058b5..592d4149039 100644
--- a/src/java.base/share/classes/java/security/Security.java
+++ b/src/java.base/share/classes/java/security/Security.java
@@ -32,6 +32,7 @@
import jdk.internal.event.EventHelper;
import jdk.internal.event.SecurityPropertyModificationEvent;
+import jdk.internal.misc.JavaSecurityPropertiesAccess;
import jdk.internal.misc.SharedSecrets;
import jdk.internal.util.StaticProperty;
import sun.security.util.Debug;
@@ -63,6 +64,9 @@ public final class Security {
/* The java.security properties */
private static Properties props;
+ /* cache a copy for recording purposes */
+ private static Properties initialSecurityProperties;
+
// An element in the cache
private static class ProviderProperty {
String className;
@@ -80,6 +84,13 @@ public Void run() {
return null;
}
});
+ // Set up JavaSecurityPropertiesAccess in SharedSecrets
+ SharedSecrets.setJavaSecurityPropertiesAccess(new JavaSecurityPropertiesAccess() {
+ @Override
+ public Properties getInitialProperties() {
+ return initialSecurityProperties;
+ }
+ });
}
private static void initialize() {
@@ -105,6 +116,14 @@ private static void initialize() {
}
loadProps(null, extraPropFile, overrideAll);
}
+ initialSecurityProperties = (Properties) props.clone();
+ if (sdebug != null) {
+ for (String key : props.stringPropertyNames()) {
+ sdebug.println("Initial security property: " + key + "=" +
+ props.getProperty(key));
+ }
+ }
+
}
private static boolean loadProps(File masterFile, String extraPropFile, boolean overrideAll) {
diff --git a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityPropertiesAccess.java b/src/java.base/share/classes/jdk/internal/misc/JavaSecurityPropertiesAccess.java
new file mode 100644
index 00000000000..ec6bf31756a
--- /dev/null
+++ b/src/java.base/share/classes/jdk/internal/misc/JavaSecurityPropertiesAccess.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 jdk.internal.misc;
+
+import java.util.Properties;
+
+public interface JavaSecurityPropertiesAccess {
+ Properties getInitialProperties();
+}
diff --git a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java
index 688ec9f0915..e73d9a5666d 100644
--- a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java
+++ b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java
@@ -36,6 +36,7 @@
import java.io.ObjectInputStream;
import java.io.RandomAccessFile;
import java.security.ProtectionDomain;
+import java.security.Security;
import java.security.Signature;
/** A repository of "shared secrets", which are a mechanism for
@@ -74,6 +75,7 @@ public class SharedSecrets {
private static JavaObjectInputStreamAccess javaObjectInputStreamAccess;
private static JavaObjectInputFilterAccess javaObjectInputFilterAccess;
private static JavaIORandomAccessFileAccess javaIORandomAccessFileAccess;
+ private static JavaSecurityPropertiesAccess javaSecurityPropertiesAccess;
private static JavaSecuritySignatureAccess javaSecuritySignatureAccess;
private static JavaxCryptoSealedObjectAccess javaxCryptoSealedObjectAccess;
@@ -248,6 +250,19 @@ public static JavaSecurityAccess getJavaSecurityAccess() {
return javaSecurityAccess;
}
+ public static void setJavaSecurityPropertiesAccess(JavaSecurityPropertiesAccess jspa) {
+ javaSecurityPropertiesAccess = jspa;
+ }
+
+ public static JavaSecurityPropertiesAccess getJavaSecurityPropertiesAccess() {
+ var access = javaSecurityPropertiesAccess;
+ if (access == null) {
+ unsafe.ensureClassInitialized(Security.class);
+ access = javaSecurityPropertiesAccess;
+ }
+ return access;
+ }
+
public static JavaUtilZipFileAccess getJavaUtilZipFileAccess() {
if (javaUtilZipFileAccess == null)
unsafe.ensureClassInitialized(java.util.zip.ZipFile.class);
diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java
new file mode 100644
index 00000000000..28b6e2f92c7
--- /dev/null
+++ b/src/jdk.jfr/share/classes/jdk/jfr/events/InitialSecurityPropertyEvent.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2022, 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. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 jdk.jfr.events;
+
+import jdk.jfr.Category;
+import jdk.jfr.Description;
+import jdk.jfr.Label;
+import jdk.jfr.Name;
+
+@Category({"Java Development Kit", "Security"})
+@Label("Initial Security Property")
+@Name("jdk.InitialSecurityProperty")
+@Description("Initial Security Properties")
+public final class InitialSecurityPropertyEvent extends AbstractJDKEvent {
+ @Label("Key")
+ public String key;
+
+ @Label("Value")
+ public String value;
+}
diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java
index cf64f554e13..80bf8b64056 100644
--- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java
+++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java
@@ -27,7 +27,9 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Properties;
+import jdk.internal.misc.SharedSecrets;
import jdk.jfr.Event;
import jdk.jfr.events.ActiveRecordingEvent;
import jdk.jfr.events.ActiveSettingEvent;
@@ -38,6 +40,7 @@
import jdk.jfr.events.FileReadEvent;
import jdk.jfr.events.FileWriteEvent;
import jdk.jfr.events.DeserializationEvent;
+import jdk.jfr.events.InitialSecurityPropertyEvent;
import jdk.jfr.events.SecurityPropertyModificationEvent;
import jdk.jfr.events.SecurityProviderServiceEvent;
import jdk.jfr.events.SocketReadEvent;
@@ -80,7 +83,9 @@ public final class JDKEvents {
jdk.internal.event.SecurityProviderServiceEvent.class,
jdk.internal.event.TLSHandshakeEvent.class,
jdk.internal.event.X509CertificateEvent.class,
- jdk.internal.event.X509ValidationEvent.class
+ jdk.internal.event.X509ValidationEvent.class,
+
+ InitialSecurityPropertyEvent.class,
};
// This is a list of the classes with instrumentation code that should be applied.
@@ -97,6 +102,7 @@ public final class JDKEvents {
private static final Class>[] targetClasses = new Class>[instrumentationClasses.length];
private static final JVM jvm = JVM.getJVM();
private static final Runnable emitExceptionStatistics = JDKEvents::emitExceptionStatistics;
+ private static final Runnable emitInitialSecurityProperties = JDKEvents::emitInitialSecurityProperties;
private static boolean initializationTriggered;
@SuppressWarnings("unchecked")
@@ -111,6 +117,7 @@ public synchronized static void initialize() {
}
initializationTriggered = true;
RequestEngine.addTrustedJDKHook(ExceptionStatisticsEvent.class, emitExceptionStatistics);
+ RequestEngine.addTrustedJDKHook(InitialSecurityPropertyEvent.class, emitInitialSecurityProperties);
}
} catch (Exception e) {
Logger.log(LogTag.JFR_SYSTEM, LogLevel.WARN, "Could not initialize JDK events. " + e.getMessage());
@@ -167,5 +174,18 @@ public static byte[] retransformCallback(Class> klass, byte[] oldBytes) throws
public static void remove() {
RequestEngine.removeHook(JDKEvents::emitExceptionStatistics);
+ RequestEngine.removeHook(JDKEvents::emitInitialSecurityProperties);
+ }
+
+ private static void emitInitialSecurityProperties() {
+ Properties p = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
+ if (p != null) {
+ for (String key : p.stringPropertyNames()) {
+ InitialSecurityPropertyEvent e = new InitialSecurityPropertyEvent();
+ e.key = key;
+ e.value = p.getProperty(key);
+ e.commit();
+ }
+ }
}
}
diff --git a/src/jdk.jfr/share/conf/jfr/default.jfc b/src/jdk.jfr/share/conf/jfr/default.jfc
index ed63b678777..9f71e936f7c 100644
--- a/src/jdk.jfr/share/conf/jfr/default.jfc
+++ b/src/jdk.jfr/share/conf/jfr/default.jfc
@@ -608,6 +608,11 @@
true
+
+ true
+ beginChunk
+
+
false
true
diff --git a/src/jdk.jfr/share/conf/jfr/profile.jfc b/src/jdk.jfr/share/conf/jfr/profile.jfc
index b8dc6506846..24688c6fcac 100644
--- a/src/jdk.jfr/share/conf/jfr/profile.jfc
+++ b/src/jdk.jfr/share/conf/jfr/profile.jfc
@@ -608,6 +608,11 @@
true
+
+ true
+ beginChunk
+
+
false
true
diff --git a/test/jdk/java/security/Security/ConfigFileTest.java b/test/jdk/java/security/Security/ConfigFileTest.java
index 0b261afed6f..e6f54a7491e 100644
--- a/test/jdk/java/security/Security/ConfigFileTest.java
+++ b/test/jdk/java/security/Security/ConfigFileTest.java
@@ -36,12 +36,20 @@
/*
* @test
* @summary Throw error if default java.security file is missing
- * @bug 8155246 8292297
+ * @bug 8155246 8292297 8292177
* @library /test/lib
* @run main ConfigFileTest
*/
public class ConfigFileTest {
+ private static final String EXPECTED_DEBUG_OUTPUT =
+ "Initial security property: crypto.policy=unlimited";
+
+ private static final String UNEXPECTED_DEBUG_OUTPUT =
+ "Initial security property: postInitTest=shouldNotRecord";
+
+ private static boolean overrideDetected = false;
+
public static void main(String[] args) throws Exception {
Path copyJdkDir = Path.of("./jdk-8155246-tmpdir");
Path copiedJava = Optional.of(
@@ -52,6 +60,7 @@ public static void main(String[] args) throws Exception {
if (args.length == 1) {
// set up is complete. Run code to exercise loading of java.security
Provider[] provs = Security.getProviders();
+ Security.setProperty("postInitTest", "shouldNotRecord");
System.out.println(Arrays.toString(provs) + "NumProviders: " + provs.length);
} else {
Files.createDirectory(copyJdkDir);
@@ -99,13 +108,32 @@ public static void main(String[] args) throws Exception {
copiedJava.toString(), "-cp", System.getProperty("test.classes"),
"-Djava.security.debug=all", "-Djavax.net.debug=all",
"-Djava.security.properties==file:///" + extraPropsFile, "ConfigFileTest", "runner");
+
+ if (!overrideDetected) {
+ throw new RuntimeException("Override scenario not seen");
+ }
}
}
private static void exerciseSecurity(int exitCode, String output, String... args) throws Exception {
ProcessBuilder process = new ProcessBuilder(args);
OutputAnalyzer oa = ProcessTools.executeProcess(process);
- oa.shouldHaveExitValue(exitCode).shouldContain(output);
+ oa.shouldHaveExitValue(exitCode)
+ .shouldContain(output);
+
+ // extra checks on debug output
+ if (exitCode != 1) {
+ if (oa.getStderr().contains("overriding other security properties files!")) {
+ overrideDetected = true;
+ // master file is not in use - only provider properties are set in custom file
+ oa.shouldContain("security.provider.2=SunRsaSign")
+ .shouldNotContain(EXPECTED_DEBUG_OUTPUT)
+ .shouldNotContain(UNEXPECTED_DEBUG_OUTPUT);
+ } else {
+ oa.shouldContain(EXPECTED_DEBUG_OUTPUT)
+ .shouldNotContain(UNEXPECTED_DEBUG_OUTPUT);
+ }
+ }
}
private static void copyJDK(Path src, Path dst) throws Exception {
diff --git a/test/jdk/jdk/jfr/event/runtime/TestActiveSettingEvent.java b/test/jdk/jdk/jfr/event/runtime/TestActiveSettingEvent.java
index ddd5ebdeb24..7cc204e7fd7 100644
--- a/test/jdk/jdk/jfr/event/runtime/TestActiveSettingEvent.java
+++ b/test/jdk/jdk/jfr/event/runtime/TestActiveSettingEvent.java
@@ -199,6 +199,7 @@ private static void testSettingConfiguration(String configurationName) throws Ex
settingValues.put(EventNames.ActiveSetting + "#threshold", "0 ns");
settingValues.put(EventNames.ActiveRecording + "#stackTrace", "false");
settingValues.put(EventNames.ActiveRecording + "#threshold", "0 ns");
+ settingValues.put(EventNames.InitialSecurityProperty + "#threshold", "0 ns");
settingValues.put(EventNames.JavaExceptionThrow + "#threshold", "0 ns");
settingValues.put(EventNames.JavaErrorThrow + "#threshold", "0 ns");
settingValues.put(EventNames.SecurityProperty + "#threshold", "0 ns");
diff --git a/test/jdk/jdk/jfr/event/security/TestInitialSecurityPropertyEvent.java b/test/jdk/jdk/jfr/event/security/TestInitialSecurityPropertyEvent.java
new file mode 100644
index 00000000000..24a8bf4f162
--- /dev/null
+++ b/test/jdk/jdk/jfr/event/security/TestInitialSecurityPropertyEvent.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2022, 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 jdk.jfr.event.security;
+
+import jdk.internal.misc.SharedSecrets;
+import jdk.jfr.Recording;
+import jdk.jfr.consumer.RecordedEvent;
+import jdk.test.lib.Asserts;
+import jdk.test.lib.jfr.EventNames;
+import jdk.test.lib.jfr.Events;
+
+import java.security.Security;
+import java.util.List;
+import java.util.Properties;
+
+/*
+ * @test
+ * @bug 8292177
+ * @summary InitialSecurityProperty JFR event
+ * @key jfr
+ * @requires vm.hasJFR
+ * @library /test/lib
+ * @modules java.base/jdk.internal.misc
+ * @run main/othervm jdk.jfr.event.security.TestInitialSecurityPropertyEvent
+ */
+public class TestInitialSecurityPropertyEvent {
+
+ private static final String SEC_KEY = "security.overridePropertiesFile";
+ public static void main(String[] args) throws Exception {
+ try (Recording recording = new Recording()) {
+ recording.enable(EventNames.InitialSecurityProperty)
+ .with("period", "beginChunk");
+ recording.start();
+ // this property edit should not be recorded
+ Security.setProperty(SEC_KEY, "false");
+ recording.stop();
+
+ Properties p = SharedSecrets.getJavaSecurityPropertiesAccess().getInitialProperties();
+ List events = Events.fromRecording(recording);
+ if (events.size() == 0) {
+ throw new Exception("No security properties - Security class may not have loaded ?");
+ }
+ Asserts.assertEquals(events.size(), p.size(), "Incorrect number of events");
+ assertEvent(events, SEC_KEY, "true");
+ }
+ }
+
+ private static void assertEvent(List events, String key, String origValue) throws Exception {
+ for (RecordedEvent e : events) {
+ if (e.getString("key").equals(key)) {
+ Events.assertField(e, "value").equal(origValue);
+ return;
+ }
+ }
+ System.out.println(events);
+ throw new Exception("Incorrect value for " + key + " property recorded");
+ }
+}
diff --git a/test/lib/jdk/test/lib/jfr/EventNames.java b/test/lib/jdk/test/lib/jfr/EventNames.java
index df834c7fd31..60d1d7a953a 100644
--- a/test/lib/jdk/test/lib/jfr/EventNames.java
+++ b/test/lib/jdk/test/lib/jfr/EventNames.java
@@ -32,133 +32,133 @@
*/
public class EventNames {
- public final static String PREFIX = "jdk.";
+ public static final String PREFIX = "jdk.";
private static final String GC_CATEGORY = "GC";
// JVM Configuration
- public final static String JVMInformation = PREFIX + "JVMInformation";
- public final static String InitialSystemProperty = PREFIX + "InitialSystemProperty";
- public final static String IntFlag = PREFIX + "IntFlag";
- public final static String UnsignedIntFlag = PREFIX + "UnsignedIntFlag";
- public final static String LongFlag = PREFIX + "LongFlag";
- public final static String UnsignedLongFlag = PREFIX + "UnsignedLongFlag";
- public final static String DoubleFlag = PREFIX + "DoubleFlag";
- public final static String BooleanFlag = PREFIX + "BooleanFlag";
- public final static String StringFlag = PREFIX + "StringFlag";
- public final static String IntFlagChanged = PREFIX + "IntFlagChanged";
- public final static String UnsignedIntFlagChanged = PREFIX + "UnsignedIntFlagChanged";
- public final static String LongFlagChanged = PREFIX + "LongFlagChanged";
- public final static String UnsignedLongFlagChanged = PREFIX + "UnsignedLongFlagChanged";
- public final static String DoubleFlagChanged = PREFIX + "DoubleFlagChanged";
- public final static String BooleanFlagChanged = PREFIX + "BooleanFlagChanged";
- public final static String StringFlagChanged = PREFIX + "StringFlagChanged";
+ public static final String JVMInformation = PREFIX + "JVMInformation";
+ public static final String InitialSystemProperty = PREFIX + "InitialSystemProperty";
+ public static final String IntFlag = PREFIX + "IntFlag";
+ public static final String UnsignedIntFlag = PREFIX + "UnsignedIntFlag";
+ public static final String LongFlag = PREFIX + "LongFlag";
+ public static final String UnsignedLongFlag = PREFIX + "UnsignedLongFlag";
+ public static final String DoubleFlag = PREFIX + "DoubleFlag";
+ public static final String BooleanFlag = PREFIX + "BooleanFlag";
+ public static final String StringFlag = PREFIX + "StringFlag";
+ public static final String IntFlagChanged = PREFIX + "IntFlagChanged";
+ public static final String UnsignedIntFlagChanged = PREFIX + "UnsignedIntFlagChanged";
+ public static final String LongFlagChanged = PREFIX + "LongFlagChanged";
+ public static final String UnsignedLongFlagChanged = PREFIX + "UnsignedLongFlagChanged";
+ public static final String DoubleFlagChanged = PREFIX + "DoubleFlagChanged";
+ public static final String BooleanFlagChanged = PREFIX + "BooleanFlagChanged";
+ public static final String StringFlagChanged = PREFIX + "StringFlagChanged";
// Runtime
- public final static String VMException = PREFIX + "JavaErrorThrow";
- public final static String ThreadStart = PREFIX + "ThreadStart";
- public final static String ThreadEnd = PREFIX + "ThreadEnd";
- public final static String ThreadSleep = PREFIX + "ThreadSleep";
- public final static String ThreadPark = PREFIX + "ThreadPark";
- public final static String JavaMonitorEnter = PREFIX + "JavaMonitorEnter";
- public final static String JavaMonitorWait = PREFIX + "JavaMonitorWait";
- public final static String JavaMonitorInflate = PREFIX + "JavaMonitorInflate";
- public final static String ClassLoad = PREFIX + "ClassLoad";
- public final static String ClassDefine = PREFIX + "ClassDefine";
- public final static String ClassUnload = PREFIX + "ClassUnload";
- public final static String SafepointBegin = PREFIX + "SafepointBegin";
- public final static String SafepointStateSyncronization = PREFIX + "SafepointStateSynchronization";
- public final static String SafepointWaitBlocked = PREFIX + "SafepointWaitBlocked";
- public final static String SafepointCleanup = PREFIX + "SafepointCleanup";
- public final static String SafepointCleanupTask = PREFIX + "SafepointCleanupTask";
- public final static String SafepointEnd = PREFIX + "SafepointEnd";
- public final static String ExecuteVMOperation = PREFIX + "ExecuteVMOperation";
- public final static String Shutdown = PREFIX + "Shutdown";
- public final static String VMError = PREFIX + "VMError";
- public final static String JavaThreadStatistics = PREFIX + "JavaThreadStatistics";
- public final static String ClassLoadingStatistics = PREFIX + "ClassLoadingStatistics";
- public final static String ClassLoaderStatistics = PREFIX + "ClassLoaderStatistics";
- public final static String ThreadAllocationStatistics = PREFIX + "ThreadAllocationStatistics";
- public final static String ExecutionSample = PREFIX + "ExecutionSample";
- public final static String NativeMethodSample = PREFIX + "NativeMethodSample";
- public final static String ExecutionSampling = PREFIX + "ExecutionSampling";
- public final static String ThreadDump = PREFIX + "ThreadDump";
- public final static String OldObjectSample = PREFIX + "OldObjectSample";
- public final static String BiasedLockRevocation = PREFIX + "BiasedLockRevocation";
- public final static String BiasedLockSelfRevocation = PREFIX + "BiasedLockSelfRevocation";
- public final static String BiasedLockClassRevocation = PREFIX + "BiasedLockClassRevocation";
+ public static final String VMException = PREFIX + "JavaErrorThrow";
+ public static final String ThreadStart = PREFIX + "ThreadStart";
+ public static final String ThreadEnd = PREFIX + "ThreadEnd";
+ public static final String ThreadSleep = PREFIX + "ThreadSleep";
+ public static final String ThreadPark = PREFIX + "ThreadPark";
+ public static final String JavaMonitorEnter = PREFIX + "JavaMonitorEnter";
+ public static final String JavaMonitorWait = PREFIX + "JavaMonitorWait";
+ public static final String JavaMonitorInflate = PREFIX + "JavaMonitorInflate";
+ public static final String ClassLoad = PREFIX + "ClassLoad";
+ public static final String ClassDefine = PREFIX + "ClassDefine";
+ public static final String ClassUnload = PREFIX + "ClassUnload";
+ public static final String SafepointBegin = PREFIX + "SafepointBegin";
+ public static final String SafepointStateSyncronization = PREFIX + "SafepointStateSynchronization";
+ public static final String SafepointWaitBlocked = PREFIX + "SafepointWaitBlocked";
+ public static final String SafepointCleanup = PREFIX + "SafepointCleanup";
+ public static final String SafepointCleanupTask = PREFIX + "SafepointCleanupTask";
+ public static final String SafepointEnd = PREFIX + "SafepointEnd";
+ public static final String ExecuteVMOperation = PREFIX + "ExecuteVMOperation";
+ public static final String Shutdown = PREFIX + "Shutdown";
+ public static final String VMError = PREFIX + "VMError";
+ public static final String JavaThreadStatistics = PREFIX + "JavaThreadStatistics";
+ public static final String ClassLoadingStatistics = PREFIX + "ClassLoadingStatistics";
+ public static final String ClassLoaderStatistics = PREFIX + "ClassLoaderStatistics";
+ public static final String ThreadAllocationStatistics = PREFIX + "ThreadAllocationStatistics";
+ public static final String ExecutionSample = PREFIX + "ExecutionSample";
+ public static final String NativeMethodSample = PREFIX + "NativeMethodSample";
+ public static final String ExecutionSampling = PREFIX + "ExecutionSampling";
+ public static final String ThreadDump = PREFIX + "ThreadDump";
+ public static final String OldObjectSample = PREFIX + "OldObjectSample";
+ public static final String BiasedLockRevocation = PREFIX + "BiasedLockRevocation";
+ public static final String BiasedLockSelfRevocation = PREFIX + "BiasedLockSelfRevocation";
+ public static final String BiasedLockClassRevocation = PREFIX + "BiasedLockClassRevocation";
// GC
- public final static String GCHeapSummary = PREFIX + "GCHeapSummary";
- public final static String MetaspaceSummary = PREFIX + "MetaspaceSummary";
- public final static String MetaspaceGCThreshold = PREFIX + "MetaspaceGCThreshold";
- public final static String MetaspaceAllocationFailure = PREFIX + "MetaspaceAllocationFailure";
- public final static String MetaspaceOOM = PREFIX + "MetaspaceOOM";
- public final static String MetaspaceChunkFreeListSummary = PREFIX + "MetaspaceChunkFreeListSummary";
- public final static String PSHeapSummary = PREFIX + "PSHeapSummary";
- public final static String G1HeapSummary = PREFIX + "G1HeapSummary";
- public final static String G1HeapRegionInformation = PREFIX + "G1HeapRegionInformation";
- public final static String G1HeapRegionTypeChange = PREFIX + "G1HeapRegionTypeChange";
- public final static String ShenandoahHeapRegionInformation = PREFIX + "ShenandoahHeapRegionInformation";
- public final static String ShenandoahHeapRegionStateChange = PREFIX + "ShenandoahHeapRegionStateChange";
- public final static String TenuringDistribution = PREFIX + "TenuringDistribution";
- public final static String GarbageCollection = PREFIX + "GarbageCollection";
- public final static String ParallelOldCollection = PREFIX + "ParallelOldGarbageCollection";
- public final static String YoungGarbageCollection = PREFIX + "YoungGarbageCollection";
- public final static String OldGarbageCollection = PREFIX + "OldGarbageCollection";
- public final static String G1GarbageCollection = PREFIX + "G1GarbageCollection";
- public final static String G1MMU = PREFIX + "G1MMU";
- public final static String EvacuationInfo = PREFIX + "EvacuationInfo";
- public final static String GCReferenceStatistics = PREFIX + "GCReferenceStatistics";
- public final static String ObjectCountAfterGC = PREFIX + "ObjectCountAfterGC";
- public final static String PromoteObjectInNewPLAB = PREFIX + "PromoteObjectInNewPLAB";
- public final static String PromoteObjectOutsidePLAB = PREFIX + "PromoteObjectOutsidePLAB";
- public final static String PromotionFailed = PREFIX + "PromotionFailed";
- public final static String EvacuationFailed = PREFIX + "EvacuationFailed";
- public final static String ConcurrentModeFailure = PREFIX + "ConcurrentModeFailure";
- public final static String GCPhasePause = PREFIX + "GCPhasePause";
- public final static String GCPhasePauseLevel1 = PREFIX + "GCPhasePauseLevel1";
- public final static String GCPhasePauseLevel2 = PREFIX + "GCPhasePauseLevel2";
- public final static String GCPhasePauseLevel3 = PREFIX + "GCPhasePauseLevel3";
- public final static String ObjectCount = PREFIX + "ObjectCount";
- public final static String GCConfiguration = PREFIX + "GCConfiguration";
- public final static String GCSurvivorConfiguration = PREFIX + "GCSurvivorConfiguration";
- public final static String GCTLABConfiguration = PREFIX + "GCTLABConfiguration";
- public final static String GCHeapConfiguration = PREFIX + "GCHeapConfiguration";
- public final static String YoungGenerationConfiguration = PREFIX + "YoungGenerationConfiguration";
- public final static String G1AdaptiveIHOP = PREFIX + "G1AdaptiveIHOP";
- public final static String G1EvacuationYoungStatistics = PREFIX + "G1EvacuationYoungStatistics";
- public final static String G1EvacuationOldStatistics = PREFIX + "G1EvacuationOldStatistics";
- public final static String G1BasicIHOP = PREFIX + "G1BasicIHOP";
- public final static String AllocationRequiringGC = PREFIX + "AllocationRequiringGC";
+ public static final String GCHeapSummary = PREFIX + "GCHeapSummary";
+ public static final String MetaspaceSummary = PREFIX + "MetaspaceSummary";
+ public static final String MetaspaceGCThreshold = PREFIX + "MetaspaceGCThreshold";
+ public static final String MetaspaceAllocationFailure = PREFIX + "MetaspaceAllocationFailure";
+ public static final String MetaspaceOOM = PREFIX + "MetaspaceOOM";
+ public static final String MetaspaceChunkFreeListSummary = PREFIX + "MetaspaceChunkFreeListSummary";
+ public static final String PSHeapSummary = PREFIX + "PSHeapSummary";
+ public static final String G1HeapSummary = PREFIX + "G1HeapSummary";
+ public static final String G1HeapRegionInformation = PREFIX + "G1HeapRegionInformation";
+ public static final String G1HeapRegionTypeChange = PREFIX + "G1HeapRegionTypeChange";
+ public static final String ShenandoahHeapRegionInformation = PREFIX + "ShenandoahHeapRegionInformation";
+ public static final String ShenandoahHeapRegionStateChange = PREFIX + "ShenandoahHeapRegionStateChange";
+ public static final String TenuringDistribution = PREFIX + "TenuringDistribution";
+ public static final String GarbageCollection = PREFIX + "GarbageCollection";
+ public static final String ParallelOldCollection = PREFIX + "ParallelOldGarbageCollection";
+ public static final String YoungGarbageCollection = PREFIX + "YoungGarbageCollection";
+ public static final String OldGarbageCollection = PREFIX + "OldGarbageCollection";
+ public static final String G1GarbageCollection = PREFIX + "G1GarbageCollection";
+ public static final String G1MMU = PREFIX + "G1MMU";
+ public static final String EvacuationInfo = PREFIX + "EvacuationInfo";
+ public static final String GCReferenceStatistics = PREFIX + "GCReferenceStatistics";
+ public static final String ObjectCountAfterGC = PREFIX + "ObjectCountAfterGC";
+ public static final String PromoteObjectInNewPLAB = PREFIX + "PromoteObjectInNewPLAB";
+ public static final String PromoteObjectOutsidePLAB = PREFIX + "PromoteObjectOutsidePLAB";
+ public static final String PromotionFailed = PREFIX + "PromotionFailed";
+ public static final String EvacuationFailed = PREFIX + "EvacuationFailed";
+ public static final String ConcurrentModeFailure = PREFIX + "ConcurrentModeFailure";
+ public static final String GCPhasePause = PREFIX + "GCPhasePause";
+ public static final String GCPhasePauseLevel1 = PREFIX + "GCPhasePauseLevel1";
+ public static final String GCPhasePauseLevel2 = PREFIX + "GCPhasePauseLevel2";
+ public static final String GCPhasePauseLevel3 = PREFIX + "GCPhasePauseLevel3";
+ public static final String ObjectCount = PREFIX + "ObjectCount";
+ public static final String GCConfiguration = PREFIX + "GCConfiguration";
+ public static final String GCSurvivorConfiguration = PREFIX + "GCSurvivorConfiguration";
+ public static final String GCTLABConfiguration = PREFIX + "GCTLABConfiguration";
+ public static final String GCHeapConfiguration = PREFIX + "GCHeapConfiguration";
+ public static final String YoungGenerationConfiguration = PREFIX + "YoungGenerationConfiguration";
+ public static final String G1AdaptiveIHOP = PREFIX + "G1AdaptiveIHOP";
+ public static final String G1EvacuationYoungStatistics = PREFIX + "G1EvacuationYoungStatistics";
+ public static final String G1EvacuationOldStatistics = PREFIX + "G1EvacuationOldStatistics";
+ public static final String G1BasicIHOP = PREFIX + "G1BasicIHOP";
+ public static final String AllocationRequiringGC = PREFIX + "AllocationRequiringGC";
// Compiler
- public final static String Compilation = PREFIX + "Compilation";
- public final static String CompilerPhase = PREFIX + "CompilerPhase";
- public final static String CompilationFailure = PREFIX + "CompilationFailure";
- public final static String CompilerInlining = PREFIX + "CompilerInlining";
- public final static String CompilerStatistics = PREFIX + "CompilerStatistics";
- public final static String CompilerConfig = PREFIX + "CompilerConfiguration";
- public final static String CodeCacheStatistics = PREFIX + "CodeCacheStatistics";
- public final static String CodeCacheConfiguration = PREFIX + "CodeCacheConfiguration";
- public final static String CodeSweeperStatistics = PREFIX + "CodeSweeperStatistics";
- public final static String CodeSweeperConfiguration = PREFIX + "CodeSweeperConfiguration";
- public final static String SweepCodeCache = PREFIX + "SweepCodeCache";
- public final static String CodeCacheFull = PREFIX + "CodeCacheFull";
- public final static String ObjectAllocationInNewTLAB = PREFIX + "ObjectAllocationInNewTLAB";
- public final static String ObjectAllocationOutsideTLAB = PREFIX + "ObjectAllocationOutsideTLAB";
+ public static final String Compilation = PREFIX + "Compilation";
+ public static final String CompilerPhase = PREFIX + "CompilerPhase";
+ public static final String CompilationFailure = PREFIX + "CompilationFailure";
+ public static final String CompilerInlining = PREFIX + "CompilerInlining";
+ public static final String CompilerStatistics = PREFIX + "CompilerStatistics";
+ public static final String CompilerConfig = PREFIX + "CompilerConfiguration";
+ public static final String CodeCacheStatistics = PREFIX + "CodeCacheStatistics";
+ public static final String CodeCacheConfiguration = PREFIX + "CodeCacheConfiguration";
+ public static final String CodeSweeperStatistics = PREFIX + "CodeSweeperStatistics";
+ public static final String CodeSweeperConfiguration = PREFIX + "CodeSweeperConfiguration";
+ public static final String SweepCodeCache = PREFIX + "SweepCodeCache";
+ public static final String CodeCacheFull = PREFIX + "CodeCacheFull";
+ public static final String ObjectAllocationInNewTLAB = PREFIX + "ObjectAllocationInNewTLAB";
+ public static final String ObjectAllocationOutsideTLAB = PREFIX + "ObjectAllocationOutsideTLAB";
// OS
- public final static String OSInformation = PREFIX + "OSInformation";
- public final static String VirtualizationInformation = PREFIX + "VirtualizationInformation";
- public final static String CPUInformation = PREFIX + "CPUInformation";
- public final static String CPULoad = PREFIX + "CPULoad";
- public final static String ThreadCPULoad = PREFIX + "ThreadCPULoad";
- public final static String SystemProcess = PREFIX + "SystemProcess";
- public final static String ThreadContextSwitchRate = PREFIX + "ThreadContextSwitchRate";
- public final static String InitialEnvironmentVariable = PREFIX + "InitialEnvironmentVariable";
- public final static String NativeLibrary = PREFIX + "NativeLibrary";
- public final static String PhysicalMemory = PREFIX + "PhysicalMemory";
- public final static String NetworkUtilization = PREFIX + "NetworkUtilization";
+ public static final String OSInformation = PREFIX + "OSInformation";
+ public static final String VirtualizationInformation = PREFIX + "VirtualizationInformation";
+ public static final String CPUInformation = PREFIX + "CPUInformation";
+ public static final String CPULoad = PREFIX + "CPULoad";
+ public static final String ThreadCPULoad = PREFIX + "ThreadCPULoad";
+ public static final String SystemProcess = PREFIX + "SystemProcess";
+ public static final String ThreadContextSwitchRate = PREFIX + "ThreadContextSwitchRate";
+ public static final String InitialEnvironmentVariable = PREFIX + "InitialEnvironmentVariable";
+ public static final String NativeLibrary = PREFIX + "NativeLibrary";
+ public static final String PhysicalMemory = PREFIX + "PhysicalMemory";
+ public static final String NetworkUtilization = PREFIX + "NetworkUtilization";
// JDK
public static final String FileForce = PREFIX + "FileForce";
@@ -166,24 +166,25 @@ public class EventNames {
public static final String FileWrite = PREFIX + "FileWrite";
public static final String SocketRead = PREFIX + "SocketRead";
public static final String SocketWrite = PREFIX + "SocketWrite";
- public final static String ExceptionStatistics = PREFIX + "ExceptionStatistics";
- public final static String JavaExceptionThrow = PREFIX + "JavaExceptionThrow";
- public final static String JavaErrorThrow = PREFIX + "JavaErrorThrow";
- public final static String ModuleRequire = PREFIX + "ModuleRequire";
- public final static String ModuleExport = PREFIX + "ModuleExport";
- public final static String TLSHandshake = PREFIX + "TLSHandshake";
- public final static String X509Certificate = PREFIX + "X509Certificate";
- public final static String X509Validation = PREFIX + "X509Validation";
- public final static String SecurityProperty = PREFIX + "SecurityPropertyModification";
- public final static String SecurityProviderService = PREFIX + "SecurityProviderService";
- public final static String Deserialization = PREFIX + "Deserialization";
+ public static final String ExceptionStatistics = PREFIX + "ExceptionStatistics";
+ public static final String JavaExceptionThrow = PREFIX + "JavaExceptionThrow";
+ public static final String JavaErrorThrow = PREFIX + "JavaErrorThrow";
+ public static final String ModuleRequire = PREFIX + "ModuleRequire";
+ public static final String ModuleExport = PREFIX + "ModuleExport";
+ public static final String TLSHandshake = PREFIX + "TLSHandshake";
+ public static final String X509Certificate = PREFIX + "X509Certificate";
+ public static final String X509Validation = PREFIX + "X509Validation";
+ public static final String InitialSecurityProperty = PREFIX + "InitialSecurityProperty";
+ public static final String SecurityProperty = PREFIX + "SecurityPropertyModification";
+ public static final String SecurityProviderService = PREFIX + "SecurityProviderService";
+ public static final String Deserialization = PREFIX + "Deserialization";
// Flight Recorder
- public final static String DumpReason = PREFIX + "DumpReason";
- public final static String DataLoss = PREFIX + "DataLoss";
- public final static String CPUTimeStampCounter = PREFIX + "CPUTimeStampCounter";
- public final static String ActiveRecording = PREFIX + "ActiveRecording";
- public final static String ActiveSetting = PREFIX + "ActiveSetting";
+ public static final String DumpReason = PREFIX + "DumpReason";
+ public static final String DataLoss = PREFIX + "DataLoss";
+ public static final String CPUTimeStampCounter = PREFIX + "CPUTimeStampCounter";
+ public static final String ActiveRecording = PREFIX + "ActiveRecording";
+ public static final String ActiveSetting = PREFIX + "ActiveSetting";
public static boolean isGcEvent(EventType et) {
return et.getCategoryNames().contains(GC_CATEGORY);