You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Grzegorz Grzybek (Jira)" <ji...@apache.org> on 2020/03/13 15:28:00 UTC

[jira] [Created] (LOG4J2-2806) Strange usage of WeakMapFactory in LoggerRegistry

Grzegorz Grzybek created LOG4J2-2806:
----------------------------------------

             Summary: Strange usage of WeakMapFactory in LoggerRegistry
                 Key: LOG4J2-2806
                 URL: https://issues.apache.org/jira/browse/LOG4J2-2806
             Project: Log4j 2
          Issue Type: Task
            Reporter: Grzegorz Grzybek


I'm working on https://ops4j1.jira.com/browse/PAXLOGGING-311 and I'm checking some (maybe a bit artificial) scenario where I create millions of unique loggers.

For this purpose, I've changed {{org.apache.logging.log4j.core.LoggerContext#loggerRegistry}} from:
{code:java}
private final LoggerRegistry<Logger> loggerRegistry = new LoggerRegistry<>();
{code}

to:
{code:java}
private final LoggerRegistry<Logger> loggerRegistry = new LoggerRegistry<>(new LoggerRegistry.WeakMapFactory<>());
{code}

The problem is that this didn't help. the _inner_ map (from logger name to instance of {{org.apache.logging.log4j.core.Logger}}) was proper {{WeakHashMap}}, but they weak key (logger name) is still strongly referenced from the value itself.

{{WeakHashMap}} Javadoc says:
bq. The value objects in a WeakHashMap are held by ordinary strong references. Thus care should be taken to ensure that value objects do not strongly refer to their own keys, either directly or indirectly, since that will prevent the keys from being discarded.

I know {{LoggerRegistry.WeakMapFactory}} is used by {{org.apache.logging.log4j.taglib.Log4jTaglibLoggerContext}}, but does it work?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)