Ok, há muita desinformação neste tópico.
Eu conheço o negócio de jogos extremamente bem, tendo estado nele por 25 anos. Eu também conheço Java em jogos extremamente bem, tendo sido o evangelista técnico da Sun Game em Java e lecionando como especialista em programação de desempenho em Java.
Em termos de velocidade computacional, o Java supera o C ++ em muitos benchmarks de computação científica atualmente. Você pode escrever um código patológico em qualquer idioma que tenha um desempenho ruim, se quiser, mas, no geral, eles estão no mesmo nível e estão por um longo tempo.
Em termos de uso de memória, Java tem alguma sobrecarga. HelloWorld é um programa 4K em java. Mas essa sobrecarga não faz muito sentido nos sistemas atuais de vários GB. Finalmente, Java tem mais tempo de inicialização. Eu não recomendaria o uso de Java para utilitários de tempo de execução curtos, como comandos de linha de comando do Unix. Nesses casos, a inicialização dominará seu desempenho. Em um jogo, no entanto, é bastante insigrante.
O código do jogo Java corretamente escrito não sofre pausas no GC. Assim como o código C / C ++, ele requer algum gerenciamento de memória ativa, mas não no nível C / C ++. Contanto que você mantenha o uso da memória em objetos de vida longa (persistir por um nível ou jogo inteiro) e objetos de vida muito curta (vetores e tais, passados e rapidamente destruídos após o cálculo), o gc não deve ser um problema visível.
Em termos de acesso direto à memória, Java tem isso há muito tempo; desde o Java 1.4 na forma de buffers nativos de bytes diretos. A modificação de bits no Java pode ser um pouco irritante devido à falta de tipos inteiros não assinados, mas as rodadas de trabalho são bem conhecidas e não são terrivelmente onerosas.
Embora seu verdadeiro Java nunca tenha sido vinculado ao Direct3D, é porque as tecnologias Java buscam a portabilidade. Possui DUAS ligações OpenGL (JOGL e LWJGL) e OpenAL (JOAL) e uma ligação de entrada portátil (JInput) que se vincula ao DirectInput no Windows, HID Manager no OSX e uma ligação do Linux (eu esqueço).
É verdade que nenhum mecanismo de jogo completo apresentou o Java da maneira, digamos, o Unity, o C # e isso é uma fraqueza no espaço independente. Por outro lado, havia dois bons APIS no nível Scenegraph que eram totalmente portáteis em plataforma Windows, OSX e Linux. Ambos escritos por Josh Slack, o primeiro foi chamado JMonkey engine e o segundo Ardor3D.
O pôster principal está correto que as duas maiores coisas que atrasaram o Java no desenvolvimento de jogos foram preconceito e portabilidade. Este último foi o maior problema. Embora você possa escrever um jogo Java e enviá-lo para Windows, OSX e Linux, nunca houve uma VM de console. Isso ocorreu devido à total inaptidão na gerência intermediária da Sun. Os poucos de nós que trabalhamos em Java em jogos realmente negociaram com a Sony nada menos que três vezes para obter uma VM em um Playstation e todas as três vezes em que a gerência média da Sun a matou.
Embora a Sun tenha flertado com as tecnologias dos clientes, o fato é que o gerenciamento da Sun nunca recebeu produtos de consumo. É por isso que o Java como linguagem cliente da Sun nunca teve sucesso de nenhuma forma e por que o Google e o Dalvik (a VM do tipo java do Android) fizeram do Java uma plataforma bem-sucedida em qualquer lugar.
E é por isso que eu codigo jogos em C # hoje. Porque Mono foi para onde a gerência da Sun se recusou.