I will need to recover my old-branch to give you some pointers about it… I - A lot of the codecs are creating plenty of intermediate objects…
Pseudo-Example on the messageCodec: List… decodedProperties… Message message = new Message(list.get(0), list.get(1)… ); it could be something done directly at wire layer without requiring the intermediate object. that’s putting some pressure at the GC. There’s also a case now where having SASL is increasing the time response (having SASL is requiring having an intermediate buffer I believe)… And there are other cases that could go beyond simply the codec.. but I have more abstract concerns at this point.. where we could probably talk over the phone.. or have a dedicated session over IRC. I have this transient branch containing some of the micro-benchmarks and some proposed changes I had a while ago. It’s probably not in a working state… but it would give you an idea where I was aiming for. https://github.com/clebertsuconic/qpid-proton/tree/old-work