After improving my block face culling in my test app, the rendering is MUCH better - enough so that the VBOs perform just as well as the display lists I currently use.
However there's still a full performance death when I render 16x16 chunks (each chunk as 16x16x16 blocks) instead of 15x16.
I don't understand why one extra row of chunks kills performance. I see nothing that explains it when I profile with visualvm, etc.
I have posted about this on stack overflow (with links to code)http://gamedev.stackexchange.com/questions/67049/how-to-debug-framerate-drops-with-vbos-opengl
We'll need to see code for how you render those chunks then. I assume you only update the chunks when they change?
I think VBOs are architecturally better than display lists (after all, they superseded display lists) but that does not mean they are faster. Display lists can be the fastest option sometimes.
Although they may be faster on some hardware, display lists aren't equally fast on all hardware. VBO performance is a bit less hardware specific.