I am using direct buffers (java.nio) to store vertex information for JOGL. These buffers are large, and they are replaced several times during the application life. The memo
Deallocating a Direct Buffer is a job done by the garbage collector some time after the ByteBuffer object is marked.
You could try calling the gc immediatly after deleting the last reference to your buffer. At least there's a chance that the memory will be free'd a bit faster.