Just wanted to throw in my contribution in this discussion. I don't want to provoke anyone here, I just speak from my own experience.
First of all, I'll say that I've done a wide variety of things when it comes to programming. Everything from building complete websites to programming security door switches to OpenGL programming to writing (albeit simple) Linux device drivers. I've dealt with everything from C to Haskell to Erlang to VisualBasic to Python/Ruby to Java.
Now, here's what I'll say about various programming languages and how they're suited for game development:
C/C++: (Yes, they are similar enough after compilation that there really isn't that much of a speed difference, except for template stuff as mentioned above)
Great languages for the situations when you want speed, but only for situations when you really need the speed. If I was to write a physics engine, I would use C/C++. If I want to write a program that spends 80% of its time inside OpenGL calls, I wouldn't. And, believe it or not, many games today are slowly more and more just becoming event dispatchers: you're waiting for input from everywhere and, if no input is given, you do nothing. It's not like in the old days where you'd have to have a game loop constantly running to check if that byte representing that key would change, and where you'd have to optimize that loop to hell, or you'd miss the keypress. And when you think about it, you don't even find tight-bound loops anywhere else in your code either (except for when you want to make physics engines etc). This means that your code is executed every once in a while, and then almost only once. So why would you need that extra C speed? Where would you need it, except for hotspots?
Python:
It's slow, but extremely flexible. If I need to generate code at runtime that I then want to execute semi-quickly, I'll use Python. Now, I'm not a fan of dynamic typing, first because it's extremely for a compiler/JIT-compiler to optimize dynamic code in any shape or form, and secondly because you loose control over a huge aspect of your program. Also, it doesn't really give you any benefits; you can do everything that you can do with Python dynamic typing using C++ polymorphism and small wrapper functions (the wrap pattern etc); the only difference is that C++ needs more syntax.
Yeah, yeah, Python uses C++ modules to accelerate hotspot parts of your program, but you can't tell me that that's a Python feature, since 1. C isn't Python and 2. you can do exactly the same thing in almost every other language in existence (including freaking VisualBasic!)
I'll use Python any day for writing extension scripts for my game, but probably not anything else. I would never dream of writing the heavily multi threaded "central core" of a game in Python, what with Python's global locks and all those shenanigans.
Java:
Extremely horrible syntax and a ripoff of C++, except slower. However, the JVM is something I think is more interesting. Imagine compiling code that can run on every platform in existence without changes (Yes! It's possible, and it's easier than you think! You can run it on mobile phones, even!), and that will be optimized at runtime for your specified platform! No other system can do that (except for the CLI and LLVM of course; similar technologies); you can't write a C++ program for instance that will use that extra vector SIMD instruction of your new CPU without recompilation.
Also, not having to worry about different primitive sizes, or different initialization technologies on different platforms does make a difference (you create a window the same way on Windows, x86 Linux and Symbian devices; no code changes). Same goes for things such as OpenGL: I make a program using the (OpenGL ES 2.0 & OpenGL 2.0) subset of the OpenGL spec, and the program runs flawlessly on OpenGL ES 2.0 devices as well as on OpenGL 2.0 devices, again, without recompilation. That makes a huge difference when it comes to development time (without sacrificing execution speed really; Java might be only 50% as fast on sunny days as C is, but that is more than enough and Java is still 8-32 times faster than Python in most situations)
However, those features are not features of the Java language, but of the JVM. So I therefore often choose to use different languages for the JVM (there are hundreds, as you all know) including JRuby, Jython (that are exactly like their interpreted counterparts, except that they run much faster on the JVM), Scala (Finally a *Statically Typed* feature-rich programming language!), Groovy, etc. Even C++ runs on the JVM if you want it to (but for C++, LLVM is a better alternative).
Oh and BTW, yes it blows that a "byte" in Java-code takes up 16 (!!) bytes of actual memory, but you do actually never really need to deal with individual bytes in Java. If you want to load, say, a binary file (it happens, right?) you just create a ByteBuffer which stores the bytes using one byte per byte (imagine that!), or even just a normal "byte[]" array that uses a 4-byte header and then stores bytes one byte per byte as well, and you even gain performance by doing so (because the ByteBuffer uses unmanaged memory, arrays do not but give you faster access anyways). It's only JVM newbies that write code using loads of memory in Java; Java can actually be very memory-efficient if you know how to make it so. It's the same thing with C++ really; a C++ noob will do stupid things (I've seen guys that extend a class instead of friending it. Yeah.) and so will a noob Python programmer. Accept it the way it is, and don't blame the JVM for penalizing a bad Java programmer more than gcc penalizes a bad C programmer (when it comes to memory at least; bug-nastiness is another topic entirely).