Regarding log4j2.enableThreadlocals configuration knob, it feels more
like a hint rather than a hard restriction. See how
AbstractStringLayout#getStringBuilder() doesn't take that flag into
account.

On Sat, Dec 28, 2019 at 10:10 PM Volkan Yazıcı <volkan.yaz...@gmail.com> wrote:
>
> Hello,
>
> I see that many Log4j components rely on TLA for efficiency reasons.
> There I have two main concerns:
>
> 1. TLAs, for obvious reasons, entail an extra memory cost on
>    threads, particularly, even when they are not used. Consider
>    a thread invoking a Log4j flow where various TLAs are
>    performed. That storage will keep on occupying the memory
>    until the next time it gets used.
>
> 2. JEE servers are known to accommodate quite some threads,
>    e.g., the the default thread count is 200 for Tomcat[1]. TLAs at
>    will will certainly have an impact on context switching costs too.
>
> Is there a convention recommended in this domain? In
> log4j2-logstash-layout, I favor object pools over TLAs. Object pools
> offer better memory utilization with the cost of synchronization. I
> see that many text-based Log4j 2.0 layouts rely on
> ThreadLocal<StringBuilder>s. While it performs pretty good, I am
> struggling with the idea of associating a large(?) text chunk next to
> each thread who has at least once attempted to log something.
>
> Best.
>
> [1] http://tomcat.apache.org/tomcat-5.5-doc/config/http.html#Common_Attributes

Reply via email to