This is an automated email from the ASF dual-hosted git repository. ckozak pushed a commit to branch release-2.x in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit dae68a68d6a59468cd15ec3ed0ee42da2457a4b5 Author: mprusakov-rbc <michail.prusa...@rbc.com> AuthorDate: Fri Jan 11 17:50:10 2019 +0000 Remove garbage creation introduced by LOG4J2-2301 After upgrading to 2.11.1 we have started seeing garbage being generated here: Stack Trace TLABs Total TLAB Size(bytes) Pressure(%) java.lang.ThreadLocal$ThreadLocalMap.set(ThreadLocal, Object) line: 481 10 3,638,864 56.192 java.lang.ThreadLocal$ThreadLocalMap.access$100(ThreadLocal$ThreadLocalMap, ThreadLocal, Object) line: 298 10 3,638,864 56.192 java.lang.ThreadLocal.setInitialValue() line: 184 10 3,638,864 56.192 java.lang.ThreadLocal.get() line: 170 10 3,638,864 56.192 org.apache.logging.log4j.core.async.AsyncLoggerConfig.log(LogEvent, LoggerConfig$LoggerConfigPredicate) line: 91 10 3,638,864 56.192 The purpose of this patch is to fix this. --- .../java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java index 61ca41f..1d2745e 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfig.java @@ -72,7 +72,7 @@ import org.apache.logging.log4j.util.Strings; @Plugin(name = "asyncLogger", category = Node.CATEGORY, printObject = true) public class AsyncLoggerConfig extends LoggerConfig { - private static final ThreadLocal<Boolean> ASYNC_LOGGER_ENTERED = new ThreadLocal<>(); + private static final ThreadLocal<Boolean> ASYNC_LOGGER_ENTERED = ThreadLocal.withInitial(() -> Boolean.FALSE); private final AsyncLoggerConfigDelegate delegate; protected AsyncLoggerConfig(final String name, @@ -90,7 +90,7 @@ public class AsyncLoggerConfig extends LoggerConfig { protected void log(final LogEvent event, final LoggerConfigPredicate predicate) { // See LOG4J2-2301 if (predicate == LoggerConfigPredicate.ALL && - ASYNC_LOGGER_ENTERED.get() == null && + ASYNC_LOGGER_ENTERED.get() == Boolean.FALSE && // Optimization: AsyncLoggerConfig is identical to LoggerConfig // when no appenders are present. Avoid splitting for synchronous // and asynchronous execution paths until encountering an @@ -109,7 +109,7 @@ public class AsyncLoggerConfig extends LoggerConfig { // from reusable messages. logToAsyncDelegate(event); } finally { - ASYNC_LOGGER_ENTERED.remove(); + ASYNC_LOGGER_ENTERED.set(Boolean.FALSE); } } else { super.log(event, predicate);