On Tue, Oct 21, 2014 at 10:45 AM, Remko Popma <remko.po...@gmail.com> wrote:

> It may be worthwhile to see if there other places where we create a lot of
> objects. (Not sure, would a profiler help here?) The API change would be a
> lot of work for perhaps relatively little savings. There may still be many
> internal places where we can get a lot of bang for our buck when small
> changes give large savings.
>
> Are there any PatternConverters that create StringBuilders when they could
> just use the one that is passed in as an argument (I'm aware of
> AbstractStyleNameConverter, perhaps there are others)?
>
> Also, in PatternLayout.toSerializable, (where we create the StringBuilder
> that is passed to all the converters to build the pattern-based message),
> we use the default StringBuilder constructor. This has a buffer of only 16
> chars. If this is not sufficient, it will be doubled, then doubled again,
> etc. We should make that buffer at least 256 or 512 chars, I would guess
> that many messages are more than 64 chars, so this minor change can save at
> least two char[] object constructions and buffer copies.
>
> One application at work got a nice performance boost when we started using
> a thread-local StringBuilder instead of creating new instances. Perhaps
> that is also a good idea for PatternLayout.toSerializable()?
>

That would be an interesting experiment! One could then also imaging having
methods typed to StringBuilder but that does not help because you must
toString a StringBuilder to get useful data out of it so you end up
creating lots of String objects anyway. So then I wonder if we should have
our own AbstractStringBuilder implementation that gives us access to the
underlying char[] that we can then log internally (accounting for the count
of course)... It's all talk until sometime sits down with a profiler... ;-)

Gary

>
> On Tue, Oct 21, 2014 at 10:51 PM, Gary Gregory <garydgreg...@gmail.com>
> wrote:
>
>> IIRC we discussed adding methods like:
>>
>> org.apache.logging.log4j.Logger.trace(String, Object)
>> org.apache.logging.log4j.Logger.trace(String, Object, Object)
>> org.apache.logging.log4j.Logger.trace(String, Object, Object, Object)
>>
>> to avoid creating arrays for 'small' #'s of args.
>>
>> Why did we decide not to do it? Too many APIs?
>>
>> Gary
>>
>> --
>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>


-- 
E-Mail: garydgreg...@gmail.com | ggreg...@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Reply via email to