Compilar com opção debug altera a performance do sistema?

6 respostas
rafaelbtz

Salve Guj,

Os logs (Log4j) de um sistema (Swing) que eu tenho estava logando o stack-trace do erro com aquele famoso “(Unknown Source)” no lugar da linha do erro. E eu precisa logar a linha exata do erro então eu inclui nos parâmetros da compilação do ANT as seguintes opções:

debug="on"
   debuglevel="source,lines"

Isso fez com que o .jar aumentasse um pouco de tamanho, até ai tudo bem, minha dúvida é isso altera em alguma coisa a performance do sistema?

Obrigado.

6 Respostas

nathanpc

Bem nunca notei isso, mas acho que não deve alterar mais nada.

T

Não altera o desempenho. A opção -g (para criar as informações de depuração) ou -g:none (não cria as informações) só altera a geração das informações de depuração.

Antigamente existia uma opção no javac (-O) que prometia fazer alguma otimização, mas devido às características do HotSpot (compilador JIT da JVM), que requer o código mais simples e desotimizado possível para ele mesmo fazer a otimização, essa opção não é mais documentada nem respeitada.

neveslucas

Sim, ao menos na minha experiência. Principalmente se você tiver muitas camadas com Reflection.

Hibernate então nem se fala.

Não posso te dar certeza, mas ao menos todas as vezes que usei isso minhas aplicações com Hibernate e/ou camadas Reflection ficaram beem pesadas, as vezes até insuportávelmente lentas.

PS: isso em ambiente de desenvolvimento.

T

Ah, agora posso dizer qual é o seu problema.

Quando você tem um computador que tenha problemas para acessar dados em disco (por exemplo, disco lento ou falta de memória), então um arquivo .class maior (que irá resultar em um arquivo .jar maior) realmente vai tornar o sistema de carregamento mais lento. Uma coisa que torna seu sistema mais lento no carregamento é o tal do antivírus, que normalmente está ligado em máquinas de desenvolvimento. Se ele tiver de ler arquivos maiores, irá demorar mais.

Nesse ponto, realmente faz diferença você ter as opções de debug setadas ou não na sua compilação.

Mas o correto é usar as opções de debug (para poder detectar os problemas de produção, quando ocorrerem) e ter uma máquina servidora melhor (e rodando um sistema operacional que não precise de antivírus, por favor.)

rafaelbtz

obrigado pelas respostas, só mais uma pergunta, para incluir a linha exata do erro no StackTrace a única maneira é com a opção debug na compilação ou existe outra maneira?

T

Só com a opção debug ligada. É para isso que ela serve, afinal de contas.

Em um sistema de que participei, inicialmente foi proposto que o sistema fosse enviado aos clientes com a opção debug desligada, por motivos de segurança. Logo de cara, no piloto, foi necessário ligar a opção, porque apareceram muitos bugs no piloto que não conseguiam ser reproduzidos de maneira simples sem a informação de debug, e até hoje a informação de debug está ligada. (A configuração sugerida aos clientes para suas máquinas roda adequadamente os programas, mesmo com essa informação ligada. O que atrapalha, na verdade, é o tipo de antivírus usado: o McAfee é particularmente horrível ao interagir com programas Java, mas o Symantec funciona bem sem problemas.)

Criado 14 de agosto de 2009
Ultima resposta 17 de ago. de 2009
Respostas 6
Participantes 4