Alta performance com Java [email protected]
Alta performance com Java
Agradecimentos
1 – Visão Geral sobre Performance
2 – Plataforma Java- compilador
- garbage collector
3 – Boas práticas de Design para uso de Memória
4 - Prática
Conteúdo
Desempenho
Gargalo
Escalabilidade
Performance?
-Online Transaction Process (OLTP)
-Batch
-Latência
-Time-response
-Think time-Throughput (tps - ops)
Vamos observar a performance
Hardware: cpu, memória, storage e network
Configuração de recursosexternos: midleware, bd, load balance, etc
Fatores para performance
- Cópia exata
- Subconjunto com poucos servidores
mas com especificação , hardware
e camadas iguais
O ambiente para os testes
Teoria das filas
Probabilidade
Auxilia
Plataforma:
-compilador (JIT)-garbage collector
“Nada melhora mais a performance do que um código bem escrito !!!”
E agora o Gargalo está no Java?
JVM arquitetura
-Inline
-Scape Analysis(GlobalScape – ArgScape – NoScape)
-Lock elision
(e.g StringBuffer e Vetor)
-Jitwatch
Otimizações
Garbage Collector
●
GC Promoções
-Serial GC (-XX:+UseSerialGC)
-Parallel GC (-XX:+UseParallelGC/ UseParallelOldGC)
-Concurrent Mark & Sweep GC ("CMS") (-XX:+UseConcMarkSweepGC)
-Garbage First (G1) GC (-XX:+UseG1GC)
Garbage Collector
Serial e Paralelo YGC
CMS e Paralelo FGC
●
G1
●
Mapa mental
- jcmd, jmap, jhat e jstat
- jvisualvm
- Memory Analyzer Tools (mat)
- javap
Profile e análise do Heap
JVM memória
Uma referência
Tempo X Espaço
-strong
-weak(metadados, classloader)
-soft(cache)
-phantom(ex. De imagem grande, corrige finalize(), evita ressureição)
Tipos de referências
WeakHashMap
Garante que ao não haver referencias fortes será recolhido da memória. Ex. Metadados
WeakHashMap – javax.cache.Caching (jsr107)
Evitando o leak de memória
Soft
Só vão ser recolhidas se for necessário mais memória!!!
Soft
Utilização da variável local, ótimo exemplo de soft
Phantom
Finzalize - guardian
Prevenindo que alguma subclasse não chame super.finalize()
FileInputStream – Enceramento explícito/ par nativo
FileInputStream - Rede de segurança
Caso o método explícito de close() não ser chamado...
Encadeamento de finalizadores
Métodos de fabricação estáticos - Imutáveis – flyweight
Não crie uma nova instância a cada chamada, reutilize!!
Classes não instanciáveis - Math, Arrays, Collections
Strings imutáveis e canônicas (intern)
Lazy Initialization – atributo de instancia
Lazy Initialization – atributo de classe
Singleton
Obs: Podemos também centralizar a origem do “criador” das instâncias (Factory Method)
Singleton
Thread local Scope:”request”? – InheritableThreadLocal
-JMX
-Concurrency
-Use Buffer para I/0, Log, Hibernate, JSF, JPA e etc
Benchmark, API, J2EE, frameworks e outros
vamos a prática...
Prática