I hear or read both Java and OpenGL getting criticized for a performance hit in using them (together or exclusively) for real time shadows. Is this justified?
OpenGL gives you roughly the same performance as Direct3D10/11 on nvidia and AMD GPUs (Intel is a different matter, their OpenGL drivers on Windows have been fairly poor in the past and might still be poor(i havn't bothered testing them in the last couple of years) and sometimes significantly better performance than D3D9 (primarily due to a lower drawcall overhead).
Java adds a bit of overhead on OpenGL calls though since you have to go through the native interface to access a native library but it shouldn't be enough to cause problems unless you are making insane amounts of native calls or if you're allready pushing the limits of the hardware.
If you get performance issues with Java it is far more likely that it is memory related (It is quite difficult to write cache and garbage collector friendly code in Java), for well written code however Java can perform just as well and sometimes even better than C++.
There are basically three areas where Java really falls short of C++ performance wise.
1) Control over memory (This makes some cache related issues difficult to solve and cache misses are very expensive, + the GC can be a pain in the ass, C++ provides better tools such as custom allocators, placement new, etc to deal with these issues in a reasonably sane way)
2) Native call overhead (For a game its not just rendering that may require native calls, you might also need it for sound and physics for example and while the overhead isn't that big it does add up)
3) No manual SIMD support. (manual SIMD support is missing in C++ as well but most modern C++ compilers provide extensions for it on the platforms that can use such instructions making it less of an issue, for 3D games there is often quite alot of code that benefits greatly from using SIMD)