210 likes | 417 Views
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
E N D
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 :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 asreferê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...
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