Alta Performance com Java

Preview:

Citation preview

Alta performance com Java

pedrina.alisson@gmail.com

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