Build buffers arent cached anymore, instead they are hopefully garbage collected in the young generation space of the heap. Same with the Deflaters as they only release the reference of the last input buffer on calling end(), which may cause a buildbuffer to survive too many garbage collections and end up in the old generation space of the heap; When creating a MapChunkBulk packet, the build buffers of the chunks are collected first and then copied to the complete build buffer in one step, instead of incrementally creating a larger buffer multiple times. And: Instead of priodically releasing unused send buffers, the PacketBuilderBuffer will hold the buffers with weak references, which makes them collectable while being stored