In my opinion, if you have an idea for a game in your head, no matter what you write it on (first), C / C ++, Java, pen and paper ... Choose a language, more experienced and experienced games, as soon as you have an approximate sketch and you know what you need to do, release a prototype, create a gameplay and architecture, and then start coding the real thing. Do not optimize until you have most or all of the functionality (in general, there are always small bugs for searching), and you really see where the bottlenecks are.
I saw this happen again and again, programmers are some of the worst premature optimizers, trying to squeeze a few cycles out of something trivial, bypassing the biggest bottlenecks, and then optimizing a bit more (in the wrong place). I am also to blame for this many times. I would say that do not choose C ++ (or Java, for that matter) because of speed, you can get very good performance from both if done "right." If necessary, you can always switch to another language if the language itself is really a bottleneck or really prevents you from doing something. Java does not automatically slow down, and C ++ does not work fast, you can go (very) wrong with both. I used to root for C and C ++ in everything, but after a long collaboration with Java, I really did not miss all these problems.
There are many (already optimized and fairly easy to use) game engines available for both languages, so there is no need to download your own ... if you don't want to. In my experience, most hobbyists of βprogrammersβ are usually more interested in the technical side of things than in a real game (including me);) After all the technical obstacles are completed and you get this nice model / bunch of sprites / particle effects that work with some shader effects, enthusiasm seems to fade ... But don't let me dissuade you, game programming is very funny even if you never finish anything (I would not name any of my own projects shen).
I have not encoded any games for a while, but for C ++ 2D SDL is a good candidate, another option might be SFML , or if you want a lower level of touch with OpenGL, you can try switching from GLFW + SOIL + some audio library. For full-blown 3D, I would say try either OGRE or Irrlicht + Irrklang (there are probably many more).
Java has at least Slick2D , the Golden T Game Engine and for lower level access, LWJGL (although I think you can also access LWJGL through Slick2D). For 3D, someone recommended me jMonkeyEngine , but I never tried.