Hi
Actually, when you add a GLEventListener into a GLAutoDrawable, all its callback including init and dispose should pass the same GLAutoDrawable except if it gets destroyed and recreated in the meantime but if it's recreated, init is called anew too. The OpenGL context is destroyed just after dispose(). I think that you don't have to do anything in your case. Keep in mind that init and dispose can be called multiple times in the lifetime of a window.
"unused ressources" is a bit vague. If you want to release some resources at runtime before closing a window, it's up to you to do that. JOGL manages the life cycle of its abstractions and allows you to force the destruction by calling destroy(). If you want to delete an OpenGL identifier (texture, buffer, shader, ...) earlier before the destruction of the context, you have to do it yourself when this context is current. Of course, you have to handle off-heap native resources by yourself too, especially direct NIO buffers.