Estamos desenvolvendo uma aplicação (ERP), e atualmente
possui 4000 classes.
Alguém sabe se existe alguma diferença, quanto a performance,
entre uma aplicação empacotada em um Jar e outra em
que os .class estejam disponíveis em uma pasta.
Se você criar o .jar com a opção 0 (zero = sem compressão), acho que você vai ter o melhor desempenho - a sua aplicação não vai ficar demorando para abrir um arquivo dentro dos diretórios, e não vai gastar tempo descomprimindo o arquivo. É que o Java deixa o .jar mapeado em memória virtual, e deixa o arquivo “aberto direto”. Mas isso é só um chute, e como você vai ter de carregar também mais classes (.jar de bibliotecas aplicativas e outras coisas), não é isso que vai deixar seu programa mais lento.
Cara, se o ClassLoader ta sendo seu problema de performance, parabens: vc ja deve ter terminado de otimizar pelo menos 3999 dessas classes pra usar I/O assincrono, nao usa banco de dados, todas as suas estruturas de dados estao PERFEITAS, e praticamente a unica coisa que sobra no profiler eh o java.lang.Class.loadClass().
[quote=fmeyer]nao precisa nem carregar a cada 5 mn … que developer normal em sã conciencia carregaria 4000 na memoria de uma vez? [/quote]uma aplicação de cluster faz isso. meu projeto de monografia fazia varredura para disponibilizar novos objetos e atualizar objetos antigos. mas o tempo ficava a criterio do administrador.
Não é que eu vá carregar as 4000 classes de uma só vez, elas
compõe todo um sistema usando Swing (não Web),
e a questão sobre .class ou .jar é mais por curiosidade mesmo,
não que eu esteja tão preocupado em melhorar o desempenho
do mesmo desta forma.
Agradeço os comentários que são sempre úteis.
boa, mas eu acho que .class deve carrega muito mais rapido do que quando eles estão empacotados pois, a logica seria que os arquivos compactados teriam que ser descompactados, o fato de usar a compactação zero poderia melhorar a performace mas mesmo assim o classloader ainda tem que fazer o split dos .class