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:37:00 UTC

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

    [ https://issues.apache.org/jira/browse/LOG4J2-2806?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17058854#comment-17058854 ] 

Grzegorz Grzybek commented on LOG4J2-2806:
------------------------------------------

Only after storing the loggers in WeakReferences inside WeakHashMap inside LoggerRegistry, I had proper garbage collection...

> 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
>            Priority: Major
>
> 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)