# HG changeset patch # User jbachorik # Date 1620401010 -7200 # Node ID cb560b38d15ab08e226e05e216e45146fb2e54a6 # Parent 6a07e2cb5bdb7a4983ee89e7ed715435c722d9b3 8266723: JFR periodic events are causing extra allocations Reviewed-by: adinn diff -r 6a07e2cb5bdb -r cb560b38d15a src/share/classes/jdk/jfr/internal/JVM.java --- a/src/share/classes/jdk/jfr/internal/JVM.java Thu May 20 16:26:15 2021 +0300 +++ b/src/share/classes/jdk/jfr/internal/JVM.java Fri May 07 17:23:30 2021 +0200 @@ -177,6 +177,14 @@ */ public static native void log(int tagSetId, int level, String message); + /** + * Check whether the logger would output on the given level + * + * @param level on level + * @return {@literal true} if the logger would output on the given level + */ + public static native boolean shouldLog(int level); + /** * Subscribe to LogLevel updates for LogTag * @@ -524,4 +532,4 @@ * @return if it is time to perform a chunk rotation */ public native boolean shouldRotateDisk(); -} +} \ No newline at end of file diff -r 6a07e2cb5bdb -r cb560b38d15a src/share/classes/jdk/jfr/internal/Logger.java --- a/src/share/classes/jdk/jfr/internal/Logger.java Thu May 20 16:26:15 2021 +0300 +++ b/src/share/classes/jdk/jfr/internal/Logger.java Fri May 07 17:23:30 2021 +0200 @@ -62,8 +62,6 @@ } public static boolean shouldLog(LogTag tag, LogLevel level) { - // Logging level is not initialized because of lack of Xlog support in jdk8, - // so this method returns true directly now. - return true; // TODO: level.level >= tag.tagSetLevel; + return JVM.shouldLog(level.level); } } diff -r 6a07e2cb5bdb -r cb560b38d15a src/share/classes/jdk/jfr/internal/RequestEngine.java --- a/src/share/classes/jdk/jfr/internal/RequestEngine.java Thu May 20 16:26:15 2021 +0300 +++ b/src/share/classes/jdk/jfr/internal/RequestEngine.java Fri May 07 17:23:30 2021 +0200 @@ -67,7 +67,9 @@ } else { jvm.emitEvent(type.getId(), JVM.counterTime(), 0); } - Logger.log(LogTag.JFR_SYSTEM_EVENT, LogLevel.DEBUG, ()-> "Executed periodic hook for " + type.getLogName()); + if (Logger.shouldLog(LogTag.JFR_EVENT, LogLevel.DEBUG)) { + Logger.log(LogTag.JFR_SYSTEM_EVENT, LogLevel.DEBUG, ()-> "Executed periodic hook for " + type.getLogName()); + } } else { executeSecure(); } @@ -83,7 +85,9 @@ public Void run() { try { hook.run(); - Logger.log(LogTag.JFR_EVENT, LogLevel.DEBUG, ()-> "Executed periodic hook for " + type.getLogName()); + if (Logger.shouldLog(LogTag.JFR_EVENT, LogLevel.DEBUG)) { + Logger.log(LogTag.JFR_EVENT, LogLevel.DEBUG, ()-> "Executed periodic hook for " + type.getLogName()); + } } catch (Throwable t) { // Prevent malicious user to propagate exception callback in the wrong context Logger.log(LogTag.JFR_EVENT, LogLevel.WARN, "Exception occured during execution of period hook for " + type.getLogName());