I am at the edge of making log4j2-logstash-layout 
<https://github.com/vy/log4j2-logstash-layout> gc-free. And at
this stage my only (GC) obstacle is the aforementioned two classes.
I need to instantiate them at each encode(LogEvent) call and this
spoils the entire gc-free magic.

What I can do is create a ThreadLocal parade of 
ByteBufferOutputStream->JsonGenerator->FilteringGeneratorDelegate.
This allows me to implement encode() as follows:

   1. get ThreadLocal resources
   2. reset BBOS
   3. writeStartObject()
   4. encode fields
   5. writeEndObject()
   6. flip and drain the BBOS to the Log4j BB sink

Though this approach has an unfortunate showstopper: If the 4th step
leaves the JsonGenerator and/or the FilteringGeneratorDelegate in a
dirty state -- consider exceeding BBOS capacity, etc. -- all the
subsequent calls will fail.

I will deeply appreciate any kind of help on this issue.

Best.

On Monday, October 22, 2018 at 6:59:02 AM UTC+2, Tatu Saloranta wrote:
>
> On Sun, Oct 21, 2018 at 2:02 PM Volkan Yazıcı <[email protected] 
> <javascript:>> wrote: 
> > 
> > Hi, 
> > 
> > I have a JsonGenerator and FilteringGeneratorDelegate usage as follows: 
> > 
> > ByteArrayOutputStream outputStream = threadLocalOutputStreamRef.get(); 
> > try (JsonGenerator jsonGenerator = 
> jsonFactory.createGenerator(outputStream)) { 
> >     try (JsonGenerator jsonGeneratorDelegate = new 
> FilteringGeneratorDelegate(jsonGenerator, tokenFilter, true, true)) { 
> >         // ... 
> >     } 
> > } 
> > 
> > Is it possible to reuse JsonGenerator and FilteringGeneratorDelegate 
> instances in a way attached to the local thread context? 
>
> No, JsonGenerator is designed for use-once life-cycle and does not 
> support reuse. 
> Instances are light-weight so there shouldn't usually be much benefit 
> from attempting to reuse instances; same goes with 
> FilteringGeneratorDelegate. 
>
> -+ Tatu +- 
>

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to