Skip to content

How to avoid buffer copies when sending

Problem

You require absolute maximum performance, and have messages that are guaranteed to be smaller than maxPayloadLength.

Solution

Use Publication.tryClaim instead of Publication.offer.

Sample

Construct a BufferClaim, retrieve it from the publication.tryClaim and write to it:

1
2
3
4
5
BufferClaim bufferClaim = new BufferClaim();
...
long result = publication.tryClaim(LENGTH_BYTES, bufferClaim);
bufferClaim.putBytes(...)
bufferClaim.commit();

Discussion

TryClaim allows you to take ownership of a portion of a given length of the active term in the Aeron log buffer. Once you have a valid buffer claim (as detected by the result being > 0), you are able to putBytes or wrap your data.

You must commit() or abort() before the unblock timeout (default 15 seconds) occurs.

See Also