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)

Reply via email to