Over the years, we've had a lot of issues with direct byte buffers. There use *is* critical to performance in some places, but they can cause a lot of memory allocation problems. In particular, they are allocated out of another pool, and that pool doesn't cause garbage collection, even though that is required for the direct buffer to be deallocated. If you look at how we manage the compression codecs, you can see that we manage a pool ourselves rather than counting on the garbage collector...
-- Owen
