[
https://issues.jboss.org/browse/JGRP-1989?page=com.atlassian.jira.plugin....
]
Sanne Grinovero commented on JGRP-1989:
---------------------------------------
That sound exciting!
Although it also sounds like you should reconsider wrapping them in some very light weight
interface (rather than byte[]). I understand you want to keep the memory cost low, but
this would be just an extremely small overhead compared to the size of the buffers itself.
The reason would be to make it explicit when things are safe to be reused, as you are
already pointing out with various challenging questions. Not sure how the API would look
like, but I'm assuming a {{release()}} or {{close()}} method would work.
Bundlers: reuse send buffer when transport == sync.
---------------------------------------------------
Key: JGRP-1989
URL:
https://issues.jboss.org/browse/JGRP-1989
Project: JGroups
Issue Type: Enhancement
Reporter: Bela Ban
Assignee: Bela Ban
Fix For: 3.6.7
With the addition of {{TCP_NIO2}}, all bundlers now create new send buffers for every
message (or message list). This generates a lot of memory allocations, perhaps it is
better to revert this change for *synchronous transports* such as {{UDP}} and {{TCP}}, and
still create new buffers for *asynchronous transports* such as {{TCP_NIO2}}.
Synchronous transports guarantee a message has been put on the wire when {{TP.send()}}
returns, whereas asynchronous transports may only have completed a partial write (so we
cannot reuse the buffer).
The code in the bundler should check for this, and copy if async or not copy if sync.
Whether or not a transport is sync is determined by a new abstract method that needs to
be overridden by every transport.
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)