A few tips:
* Use floats instead of doubles for your vertices. Just changing all of your glVertex3d calls to glVertex3f should give you a little bit of a performance boost. Floats are 32 bit where doubles are 64 bit. Unless you're doing something in the name of science, I doubt you need that extra 32-bits of precision. You surely don't need it for a game (these days - in the not so distant future I expect we'll be using doubles more often).
* After switching to floats, get rid of the calls to glVertex. You shouldn't be rendering in immediate mode anymore, particularly not in Java (JNI overhead for each call can add up). Batch everything using vertex arrays or through the vertex buffer object extension when supported by the driver. Check for the VBO extension first, and fall back to vertex arrays if it isn't available. The goal on modern cards is to batch many vertices together and send them to the hardware at the same time. Both VBOs and vertex arrays allow you to do that, and vertex arrays are still more efficient on older cards than individual glVertex calls. As to display lists, they might be useful for static data, but they are crap for dynamic data.
* Meshes shouldn't be rendering themselves. In your current setup, each mesh sets the render states it needs, then renders immediately. This is bad, bad, bad. Render state changes are expensive. If you insist on Mesh objects rendering themselves, then don't do so immediately. Instead, each mesh should pass its vertex buffer and render state (material) data on to a render queue. The render queue then sorts vertex buffers by render state, and when the update is finished it renders everything at once. This cuts down on the number of render state changes each frame. Look into scenegraphs and see how they can help you organize data for rendering.
I suspect that the real problem might lie elsewhere, as even doing what you are doing you should be able to render a single model at a decent framerate. Even so, the set up you have now needs to be scrapped and replaced. Once you have a more efficient rendering system set up, then you can look for problems elsewhere.