Por que Java leva tanto tempo e memória em comparação com C ++ / C?

Não farei declarações gerais sobre o desempenho de uma linguagem / sistemas. As medidas de desempenho são geralmente subjetivas, sempre medidas para um caso de uso. Portanto, é essencial sempre que comparamos dois sistemas em desempenho, sempre falamos sobre os casos de uso que consideramos.
Agora, o Java evoluiu e os seus avanços na tecnologia VM são tantos que nem sempre é preto ou branco. Mas, em geral, posso comentar que os programas java geralmente levam mais tempo para iniciar (precisam carregar JVM, classes, JIT etc.), mas o tempo de execução pode não ser tão lento. Você pode ler sobre isso aqui: desempenho Java
JVMs terão alguma sobrecarga de memória devido a
a) É próprio estado
b) despesas gerais adicionais para coleta de lixo e outros recursos de segurança
Há uma apresentação antiga sobre o mesmo:
http://www.cs.virginia.edu/kim/p…

Espero que isso responda à sua pergunta. Como não sou uma autoridade na JVM, não posso comentar muito (além dos recursos que li / encontrei).

Essencialmente, você está consumindo a sobrecarga da Java Virtual Machine. É muito, muito, muito melhor do que costumava ser, mas há uma “incompatibilidade de impedância” subjacente entre o bytecode que você compila para versar a arquitetura subjacente. Dito isto, você ganha coisas como portabilidade, segurança de tipo, seqüências de caracteres apropriadas etc.