Então meu sistema tem algumas telas com muitos componentes Swing e quando as abro pela primeira vez elas demorando um pouco (não chega a ser irritante) para abrir, mas depois abrem mais rápido porque elas já estão em cache.
1-Tem alguma maneira de eu realizar um pre-cache de todas as minhas telas ao iniciar o programa?
2-Quais são boas praticas para deixar as telas de swing mais leves? Carregar algum código no initComponentes causa uma perda de perfomace?
gosto de utilizar internalframes e frames, acho eles rapidos.
em poucos casos utilizo jdialog.
talvez ajude.
R
roger_rf
Já fiz telas beeem monstruosas que carregam rapidamente, então não creio que o problema seja a quantidade de componentes, mas o volume e características dos dados que elas comportam. É uma quantidade muito grande de dados? A fonte de dados é muito lenta? Creio que seria uma boa idéia fazer um profile na sua aplicação para saber onde estão os gargalos de desempenho. Tente minimizar as leituras, usar pools de conexões, usar múltiplas threads para buscar seus dados.
Caso você opte por fazer o cache das telas, defina um momento adequado para isso (digamos, no início da aplicação) e dispare algumas threads em separado para criar (mas não exibir) as telas de interesse.
Jose111
Quando ela busca informações do banco ela é rápida, ela é lenta quando é iniciada pela primeira vez, depois disso fica normal…mas sabe como cliente é “exigente” e tem pc ruim :twisted:
Como crio um profile para ver os gargalos de desempenho?
Como? :shock:
T
thingol
Aplicações Java são péssimas em termos de startup mesmo, já que elas carregam muitas classes durante a inicialização.
Mesmo que seu programa não tenha telas, só o fato de terem de carregar muitas coisas já mina seu tempo de inicialização.
O “JQS” (Java Quick Starter) ajuda um pouco, mas não tanto.
Coisas que empacam muito o tempo de inicialização:
Alguns antivírus, como o McAfee, cismam com arquivos .jar. Na minha máquina (que nem é tão ruim assim) o Eclipse leva 4 minutos para iniciar com o antivírus ligado, e 20 segundos com ele desligado.
Máquinas ruins também têm problemas com o Java, e é mais por falta de memória ou disco lento. A CPU nem é tão crítica assim, mas em máquinas velhas é difícil pôr mais memória (já que a memória para máquinas antigas é cara e difícil de achar, e às vezes nem é possível atualizar a quantidade de memória).
R
roger_rf
Que IDE você está usando para criar sua aplicação? Se for o NetBeans, ele já vem com um Profiler integrado. Se sua IDE não tiver Profiler, você pode usar o Java VisualVM - se você estiver na plataforma Windows, procure um programa chamado jvisualvm.exe na subpasta \bin da sua JDK.
Para saber mais sobre threads, recomendo o link abaixo:
Para criar um formulário sem exibi-lo, basta chamar o construtor dele mas NÃO chamar setVisible(true).
Jose111
@thingol
O JQS já esta ligado.
Já fiz um teste com outro anti-vírus e executa igual.
@roger_rf
Testei com o profiler e o carregamento da tela na primeira execução do sistema chega de 20 % à 40% da memória da Vm ( acredito que seja isso, esse resultado é do primeiro gráfico)
Vou tentar esse carregamento por threads. Ele funcionaria assim:
thread{
minhaTela mt = new minhaTela();
mt.pack();
}
//Agora em outra classe
mt.setVisible(true);
Não consegui olhar direito esse link porque hoje aqui ta tenso :?