43
Alta performance com Java [email protected]

Alta Performance com Java

Embed Size (px)

Citation preview

Page 1: Alta Performance com Java

Alta performance com Java

[email protected]

Page 2: Alta Performance com Java

Agradecimentos

Page 3: Alta Performance com Java

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

Page 4: Alta Performance com Java

Desempenho

Gargalo

Escalabilidade

Performance?

Page 5: Alta Performance com Java

-Online Transaction Process (OLTP)

-Batch

-Latência

-Time-response

-Think time-Throughput (tps - ops)

Vamos observar a performance

Page 6: Alta Performance com Java

Hardware: cpu, memória, storage e network

Configuração de recursosexternos: midleware, bd, load balance, etc

Fatores para performance

Page 7: Alta Performance com Java

- Cópia exata

- Subconjunto com poucos servidores

mas com especificação , hardware

e camadas iguais

O ambiente para os testes

Page 8: Alta Performance com Java

Teoria das filas

Probabilidade

Auxilia

Page 9: Alta Performance com Java

Plataforma:

-compilador (JIT)-garbage collector

“Nada melhora mais a performance do que um código bem escrito !!!”

E agora o Gargalo está no Java?

Page 10: Alta Performance com Java

JVM arquitetura

Page 11: Alta Performance com Java

-Inline

-Scape Analysis(GlobalScape – ArgScape – NoScape)

-Lock elision

(e.g StringBuffer e Vetor)

-Jitwatch

Otimizações

Page 12: Alta Performance com Java

Garbage Collector

Page 13: Alta Performance com Java

GC Promoções

Page 14: Alta Performance com Java

-Serial GC (-XX:+UseSerialGC)

-Parallel GC (-XX:+UseParallelGC/ UseParallelOldGC)

-Concurrent Mark & Sweep GC ("CMS") (-XX:+UseConcMarkSweepGC)

-Garbage First (G1) GC (-XX:+UseG1GC)

Garbage Collector

Page 15: Alta Performance com Java

Serial e Paralelo YGC

Page 16: Alta Performance com Java

CMS e Paralelo FGC

Page 17: Alta Performance com Java

G1

Page 18: Alta Performance com Java

Mapa mental

Page 19: Alta Performance com Java

- jcmd, jmap, jhat e jstat

- jvisualvm

- Memory Analyzer Tools (mat)

- javap

Profile e análise do Heap

Page 20: Alta Performance com Java

JVM memória

Page 21: Alta Performance com Java

Uma referência

Page 22: Alta Performance com Java

Tempo X Espaço

Page 23: Alta Performance com Java

-strong

-weak(metadados, classloader)

-soft(cache)

-phantom(ex. De imagem grande, corrige finalize(), evita ressureição)

Tipos de referências

Page 24: Alta Performance com Java

WeakHashMap

Garante que ao não haver referencias fortes será recolhido da memória. Ex. Metadados

Page 25: Alta Performance com Java

WeakHashMap – javax.cache.Caching (jsr107)

Evitando o leak de memória

Page 26: Alta Performance com Java

Soft

Só vão ser recolhidas se for necessário mais memória!!!

Page 27: Alta Performance com Java

Soft

Utilização da variável local, ótimo exemplo de soft

Page 28: Alta Performance com Java

Phantom

Page 29: Alta Performance com Java

Finzalize - guardian

Prevenindo que alguma subclasse não chame super.finalize()

Page 30: Alta Performance com Java

FileInputStream – Enceramento explícito/ par nativo

Page 31: Alta Performance com Java

FileInputStream - Rede de segurança

Caso o método explícito de close() não ser chamado...

Page 32: Alta Performance com Java

Encadeamento de finalizadores

Page 33: Alta Performance com Java

Métodos de fabricação estáticos - Imutáveis – flyweight

Não crie uma nova instância a cada chamada, reutilize!!

Page 34: Alta Performance com Java

Classes não instanciáveis - Math, Arrays, Collections

Page 35: Alta Performance com Java

Strings imutáveis e canônicas (intern)

Page 36: Alta Performance com Java

Lazy Initialization – atributo de instancia

Page 37: Alta Performance com Java

Lazy Initialization – atributo de classe

Page 38: Alta Performance com Java

Singleton

Obs: Podemos também centralizar a origem do “criador” das instâncias (Factory Method)

Page 39: Alta Performance com Java

Singleton

Page 40: Alta Performance com Java

Thread local Scope:”request”? – InheritableThreadLocal

Page 41: Alta Performance com Java

-JMX

-Concurrency

-Use Buffer para I/0, Log, Hibernate, JSF, JPA e etc

Benchmark, API, J2EE, frameworks e outros

Page 42: Alta Performance com Java

vamos a prática...

Prática

Page 43: Alta Performance com Java