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