C++ if you enjoy low level optimization, complete control over your code, and/or knowing that your language is designed to run as fast as possible even if that means leaving open the possibility of making big mistakes. Most game engines are wrote in c++ for these reasons.
Java is also a pretty good language. It does a lot of extra work for you in attempt to prevent mistakes, it does this extra work even when you don't make mistakes. Therefore it is not as fast as c++, nor does it offer you the same kind of control over your machine. However the trade off means less mistakes, and therefor increased productivity.