Post on 07-Apr-2016
Java Performance
Flávia Falcão<fmcf2@cin.ufpe.br>
RoteiroPerformancePerformance no desenvolvimento de SoftwareBenchmark Profiling HotSpot Virtual MachineGarbage CollectionReferências
PerformancePerformance computacional :
-Qual o melhor algoritmo? Memória
-Quanta memória o software necessita para rodar?Startup TimeEscalabilidade-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.
BenchmarkingDevem 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.
ProfilingDeterminam 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 :ExemploDesde 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 MachineA 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 ServerHá 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 : RuntimeInterpretador 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óriaGarbage ColletionSincronização rápida de threads
HotSpot VM :CompilerExecuta 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 nativoInlining dos metodos otimizadosOtimizações:eliminação de codigo morto e de subexpressões comuns...Consome menos memóriaMais lento que um compilador JIT ,mas a qualidade das otimizações valem a pena.
Garbage CollectionA 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 CollectionDivide 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 CollectionExemplo : 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 PortalAs 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ênciashttp://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