Some folks call this "zero-copy". Gary
On Wed, Feb 24, 2016 at 7:50 AM, Remko Popma <[email protected]> wrote: > Ah, now I finally get what you mean by optimize, you want to avoid making > copies. That is certainly a good idea. > One thing I considered at some point was to let the PatternConverters > write to a ByteBuffer instead of to a StringBuilder. > That may be an interesting thing to experiment with. I would recommend > using a ByteBuffer for this. You can wrap a byte[] array in a ByteBuffer > and when the PatternConverters are done writing to the ByteBuffer, use the > underlying byte[] array to feed data to the legacy appenders. > > On Wed, Feb 24, 2016 at 9:16 PM, Mikael Ståldal <[email protected] > > wrote: > >> I want to optimize toByteArray() in an appender, and have all existing >> appenders take advantage of it (without having to use encode). >> >> I don't want to use StringBuilder.toString(), I want to avoid the >> intermediate String object. >> >> This is not only about avoiding GC, it is also about avoiding unnecessary >> copying of data. >> >> On Wed, Feb 24, 2016 at 12:06 PM, Remko Popma <[email protected]> >> wrote: >> >>> I don't understand though: appenders should only call encode() if they >>> can offer the Layout a ByteBuffer to write into... >>> >>> Sent from my iPhone >>> >>> On 2016/02/24, at 19:36, Mikael Ståldal <[email protected]> >>> wrote: >>> >>> But it would be useful to have a way to go from StringBuilder to byte[] >>> (not ByteBuffer) as well, to be able to optimize a layout and still have it >>> working together with all existing appenders. >>> >>> On Wed, Feb 24, 2016 at 11:19 AM, Remko Popma <[email protected]> >>> wrote: >>> >>>> StringBuilder implements CharSequence; the copy method takes a CharSequence >>>> as its source of characters. >>>> >>>> >>>> On Wednesday, 24 February 2016, Remko Popma <[email protected]> >>>> wrote: >>>> >>>>> See TextEncoderHelper's methods, >>>>> copy: from StringBuilder to CharBuffer >>>>> encodeText: from CharBuffer to ByteBufferDestination >>>>> >>>>> We don't want to create the byte[] array object so we write directly >>>>> into the ByteBuffer. >>>>> >>>>> On Wednesday, 24 February 2016, Mikael Ståldal < >>>>> [email protected]> wrote: >>>>> >>>>>> I still cannot find a way to convert a StringBuilder to a byte[]. >>>>>> >>>>>> On Tue, Feb 23, 2016 at 11:03 PM, Gary Gregory < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> How about /dropping/ Serializer1 altogether? Having both is mighty >>>>>>> complicated. >>>>>>> >>>>>>> Gary >>>>>>> >>>>>>> On Tue, Feb 23, 2016 at 8:52 AM, Remko Popma <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> I wouldn't mind that (no strong opinion either way) but I won't >>>>>>>> have time to do that work. >>>>>>>> >>>>>>>> On Wed, Feb 24, 2016 at 1:23 AM, Gary Gregory < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> I see we now have: >>>>>>>>> >>>>>>>>> >>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2 >>>>>>>>> >>>>>>>>> Should we >>>>>>>>> deprecate >>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer >>>>>>>>> and reimplement everything in terms of Serializer2, even if objects >>>>>>>>> are >>>>>>>>> allocated? >>>>>>>>> >>>>>>>>> Gary >>>>>>>>> >>>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Layout now extends Encoder so now it has this method: >>>>>>>>>> >>>>>>>>>> encode(LogEvent source, ByteBufferDestination destination) >>>>>>>>>> >>>>>>>>>> PatternLayout implements this method. It delegates the work of >>>>>>>>>> converting the StringBuilder to bytes and writing these bytes into >>>>>>>>>> the >>>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are >>>>>>>>>> created during this conversion. >>>>>>>>>> >>>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose >>>>>>>>>> manager implements ByteBufferDestination. This appender calls the >>>>>>>>>> #encode() >>>>>>>>>> methos on the layout (other managers still call Layout#toByteArray). >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal < >>>>>>>>>> [email protected]> wrote: >>>>>>>>>> >>>>>>>>>>> I cannot really find it. >>>>>>>>>>> >>>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma < >>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>> >>>>>>>>>>>> Yes, that was implemented in >>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274. >>>>>>>>>>>> >>>>>>>>>>>> Please also see the description and discussion in the epic >>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270. >>>>>>>>>>>> >>>>>>>>>>>> Sent from my iPhone >>>>>>>>>>>> >>>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal < >>>>>>>>>>>> [email protected]> wrote: >>>>>>>>>>>> >>>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[], >>>>>>>>>>>> without any intermediate String? >>>>>>>>>>>> >>>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder >>>>>>>>>>>> cannot >>>>>>>>>>>> do it. >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> [image: MagineTV] >>>>>>>>>>>> >>>>>>>>>>>> *Mikael Ståldal* >>>>>>>>>>>> Senior software developer >>>>>>>>>>>> >>>>>>>>>>>> *Magine TV* >>>>>>>>>>>> [email protected] >>>>>>>>>>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | >>>>>>>>>>>> www.magine.com >>>>>>>>>>>> >>>>>>>>>>>> Privileged and/or Confidential Information may be contained in >>>>>>>>>>>> this message. If you are not the addressee indicated in this >>>>>>>>>>>> message >>>>>>>>>>>> (or responsible for delivery of the message to such a person), >>>>>>>>>>>> you may not copy or deliver this message to anyone. In such case, >>>>>>>>>>>> you should destroy this message and kindly notify the sender by >>>>>>>>>>>> reply email. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> [image: MagineTV] >>>>>>>>>>> >>>>>>>>>>> *Mikael Ståldal* >>>>>>>>>>> Senior software developer >>>>>>>>>>> >>>>>>>>>>> *Magine TV* >>>>>>>>>>> [email protected] >>>>>>>>>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >>>>>>>>>>> >>>>>>>>>>> Privileged and/or Confidential Information may be contained in >>>>>>>>>>> this message. If you are not the addressee indicated in this message >>>>>>>>>>> (or responsible for delivery of the message to such a person), >>>>>>>>>>> you may not copy or deliver this message to anyone. In such case, >>>>>>>>>>> you should destroy this message and kindly notify the sender by >>>>>>>>>>> reply email. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> E-Mail: [email protected] | [email protected] >>>>>>>>> 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: [email protected] | [email protected] >>>>>>> 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 >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> [image: MagineTV] >>>>>> >>>>>> *Mikael Ståldal* >>>>>> Senior software developer >>>>>> >>>>>> *Magine TV* >>>>>> [email protected] >>>>>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >>>>>> >>>>>> Privileged and/or Confidential Information may be contained in this >>>>>> message. If you are not the addressee indicated in this message >>>>>> (or responsible for delivery of the message to such a person), you >>>>>> may not copy or deliver this message to anyone. In such case, >>>>>> you should destroy this message and kindly notify the sender by reply >>>>>> email. >>>>>> >>>>> >>> >>> >>> -- >>> [image: MagineTV] >>> >>> *Mikael Ståldal* >>> Senior software developer >>> >>> *Magine TV* >>> [email protected] >>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >>> >>> Privileged and/or Confidential Information may be contained in this >>> message. If you are not the addressee indicated in this message >>> (or responsible for delivery of the message to such a person), you may >>> not copy or deliver this message to anyone. In such case, >>> you should destroy this message and kindly notify the sender by reply >>> email. >>> >>> >> >> >> -- >> [image: MagineTV] >> >> *Mikael Ståldal* >> Senior software developer >> >> *Magine TV* >> [email protected] >> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >> >> Privileged and/or Confidential Information may be contained in this >> message. If you are not the addressee indicated in this message >> (or responsible for delivery of the message to such a person), you may >> not copy or deliver this message to anyone. In such case, >> you should destroy this message and kindly notify the sender by reply >> email. >> > > -- E-Mail: [email protected] | [email protected] 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
