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

Reply via email to