Java Runtime Performance Vs Código C / C ++ Nativo?

Tornei-me cada vez mais confortável programar em Java do que com C ++ ou C. Espero ter uma noção do impacto no desempenho incorrido usando um interpretador de JVM, em oposição a executar o mesmo "projeto" nativamente. Eu percebo que existe algum nível de subjetividade aqui; a qualidade do programa dependerá muito de uma boa implementação. Estou interessado nos seguintes aspectos em um sentido geral:

Deve haver alguma linha de base para sobrecarga ao usar um interpretador. Existe alguma regra geral para lembrar? 10% 15%? (Eu tirei esses números do nada) Eu li o blog ocasional dizendo que o código Java é quase tão rápido quanto o código nativo, mas acho que pode ter sido tendencioso.

O coletor de lixo da JVM adiciona uma sobrecarga significativa ao desempenho do tempo de execução? Eu sei que os aplicativos Cocoa começaram a usar um modelo de coleta de lixo, e eu concordo que isso torna a programação muito mais simples, mas a que custo?

Qual é a sobrecarga de fazer chamadas do sistema a partir de Java? Por exemplo, criar um objeto Socket em oposição à API do soquete C.

Finalmente, lembro-me de ler em algum lugar que a implementação da JVM é de encadeamento único. Se isso é verdade (o que eu sou cético sobre), isso significa que os encadeamentos Java realmente não são verdadeiros encadeamentos? Um encadeamento java, em geral, corresponde a um encadeamento fornecido pelo kernel? Um aplicativo Java se beneficia da mesma maneira que um aplicativo nativo teria de vários núcleos / várias CPUs?

Qualquer conselho do desenvolvedor que entenda as complexidades do desempenho do JVM e do programa java seria muito apreciado. Obrigado.

questionAnswers(10)

yourAnswerToTheQuestion