Flávia Falcão <fmcf2@cin.ufpe.br> Java Performance Flávia Falcão <fmcf2@cin.ufpe.br>
Roteiro Performance Performance no desenvolvimento de Software Benchmark Profiling HotSpot Virtual Machine Garbage Collection Referências
Performance Performance computacional : -Qual o melhor algoritmo? Memória -Quanta memória o software necessita para rodar? Startup Time Escalabilidade -Um servidor pode funcionar bem com 50 usuários ,mas como ele se comporta com 1000? Performance Percebida
Performance nas Fases de Desenvolvimento As fases do tradicional modelo de Desenvolvimento Orientado a Objetos,com uma fase adcional “performace profiling”que determina as caracteristicas de performance do sistema.
Benchmarking Devem ser capazes de: Comparar a performance de soluções alternativas; Retratar a performance de aplicações. Macro benchmark :testam uma grande parte do sistema. Micro benchmark :que testam um especifico aspecto do sistema.
Profiling Determinam que áreas do sistema consomem maior parte dos recursos : - Que métodos são chamados mais vezes? - Que métodos usam a maior porcentagem do tempo? - Que métodos estão chamando os métodos mais usados? - Que método aloca mais memória?
Profiling :Exemplo Desde Java2 SDK 1.2, inclui básico profiling,que permitem verificar onde o programa consome mais tempo : Java –Xrunhprof [opcoes]<MainClassName>
Exemplo: Saida do profiling ..... percent live alloc'ed stack class rank self accum bytes objs bytes objs trace name 1 73.33% 73.33% 601448 220 601448 220 1 [I 2 7.38% 80.71% 60536 406 60536 406 1 [C 3 5.49% 86.20% 45000 217 45000 217 1 [B 4 2.09% 88.28% 17120 315 17120 315 1 java.lang.Object 5 1.84% 90.12% 15064 282 15064 282 1 [S 6 1.62% 91.74% 13328 238 13328 238 1 java.lang.Class ...
HotSpot Virtual Machine A Tecnologia Java HotSpot foi desenvolvida com o objetivo de maximizar o desempenho de programas executados em máquinas virtuais java .Atualmente a Sun oferece dois produtos baseados nesta tecnologia ,a solução cliente e a solução servidor. Desde a versão 1.3 do J2SE SDK todas as implementações da Sun incluem a versão HotSpot Client VM; a HotSpot Server VM é opcional.
HotSpot VM :Arquitetura
Client & Server VM
HotSpot VM :Client x Server Há duas partes nos sistemas HotSpot : runtime e compiler. As versões cliente e servidor são diferenciadas pelo seu compilador. A versão cliente é otimizada para que as aplicações tenham uma inicialização rápida e consumam menos memória, enquanto que a versão servidor é otimizada para desempenho.
HotSpot VM : Runtime Interpretador de bytecode: -Um simples compilador JIT compila todos os metodos antes deles serem executados.A HotSpot runtime executa muitos métodos em modo puramente interpretado. Gerenciamento de memória Garbage Colletion Sincronização rápida de threads
HotSpot VM :Compiler Executa o codigo imediatamente usando o interpretador. À medida que a execução prosegue ,analisa o código para detectar os hot spots. Compilação para codigo nativo Inlining dos metodos otimizados Otimizações:eliminação de codigo morto e de subexpressões comuns... Consome menos memória Mais lento que um compilador JIT ,mas a qualidade das otimizações valem a pena.
Garbage Collection A JDK 1.4.1 inclui seis diferentes algoritmos de Garbage Collection; e mais de doze opcões de comandos para configurar o garbage collection. Os beneficios trazidos pelo GC tem um custo que podem causar impacto na performance : pausas.
Fatores que afetam o GC Tempo de vida dos objetos: - temporários, intermediários, longos. Tipo de objetos -Tamanho, complexidade. Relação entre objetos -Dificuldade de determinar e percorrer as referências de objetos.
Generational Collection Divide a heap em multiplas áreas (gerações) - Objetos gerenciados por idades. - Objetos novos morrem mais cedo : GC mais frequentemente - Gerações mais velhas coletadas com menos frequencia -Diferentes Gerações usam diferentes algoritimos : Copying , Mark-Sweep , Mark-Compact, Incremental, Parallel Copy, Concurrent, Parallel Scavenge...
HotSpot VM :Heap Layout
Profiling Garbage Collection Exemplo : java -Xloggc:log.txt –verbose:gc <mainclass> 0.000: [GC 511K->127K(1984K), 0.0090819 secs] 0.146: [GC 639K->131K(1984K), 0.0032250 secs] 0.230: [GC 642K->137K(1984K), 0.0032993 secs] 0.387: [GC 649K->256K(1984K), 0.0066710 secs] 19.726: [GC 768K->328K(1984K), 0.0045419 secs] 55.513: [GC 840K->380K(1984K), 0.0029828 secs]
GC Portal As informações output do verbose:gc são pouco amigaveis. O GC Portal provê uma analisa do output do verbose:gc , através de mecanismo como : - analise e relatórios - gráfico e etc..
Referências http://java.sun.com/docs/books/performance/ http://java.sun.com/docs/hotspot/gc1.4.2/ http://java.sun.com/developer/technicalArticles/Programming/GCPortal/ http://developers.sun.com/events/techdays/presentations/seattle/CodecampHotSpotVirtualMachineTuning.pdf