Existe uma diferença de desempenho entre Javac debug on e off?
-
03-07-2019 - |
Pergunta
Se eu ligar o gerador de informações de depuração com Javac em seguida, os arquivos de classe são 20-25% maior. Tem essa quaisquer efeitos de desempenho na execução do programa de Java? Se sim em que condições e como muitos. Espero um pouco impacto sobre o carregamento das classes, porque os arquivos são maiores, mas isso deve ser mínima.
Solução
Em qualquer idioma, informações de depuração é meta informação. Ele, por sua natureza aumenta o tamanho dos arquivos de objetos, aumentando assim o tempo de carga. Durante a execução fora de um depurador, esta informação é realmente completamente ignorado. Como descrito (embora não seja claramente) no JVM especificação as informações de depuração é armazenada fora do fluxo de bytecode. Isto significa que em tempo de execução, não há diferença no arquivo de classe. Se você quer ter certeza de que, experimentá-lo: -).
Ps. Muitas vezes, para depuração não há valor em desligar otimização. Que faz ter um impacto no desempenho.
Outras dicas
Desligar depuração por si só não deve fazer a diferença em tudo. Mas uma vez que você desliga a depuração e ligue otimização, você deve ver uma diferença, pois isso faz com que algumas otimizações estáticos em tempo de compilação. Desta forma, mesmo o seu hot-spot otimizado código fica mais rápido em tempo de execução.
Mas até agora, o trade-off entre a obtenção significando Stack-traços completos ou ter um pouco mais fácil de desempenho, eu sempre votou para a pilha-traços. Afinal de contas, os usuários estão dispostos a gastar $ 1000 cada ano para obter uma máquina mais rápida, mas não estão dispostos a gastar 15 minutos para dar-lhe mensagens de erro significativo para você para resolver seus problemas.
Depois dos anos, estou mais disposto a valorizar meus 15 minutos superior a US $ do usuário 1000. :)
Por favor, esteja ciente de que desde JDK1.3 javac ignora quaisquer opções de otimização, "otimização de tempo de compilação é desnecessária"