Hi
At first, glDeleteBuffers frees the OpenGL identifier or marks it as available and triggers the destruction of the data store on the GPU. It doesn't destroy the storage on the CPU (for example if you create your own direct NIO buffer).
Secondly, rather call glDeleteBuffers from the same thread that performs the rendering by queuing a GLRunnable, see GLAutoDrawable.invoke. Don't delete a buffer if it might still be in use.
Thirdly, call it when you're sure you don't need it anymore. Rather use a buffer to contain the id instead of an array because a direct NIO buffer will be probably created under the hood in your case anyway.