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)