http://slidesha.re/1kQU0Yg @BR_LuanCestari
Tunning JVM em Java 8
Guia do Mochileiro que não pode faltar
TDC 2014 SP - Luan Cestari
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Ressalva/Disclaimer
● ESTA APRESENTAÇÃO REFLETE A OPINIÕES E
PROPOSTAS PESSOAIS DO AUTOR SOBRE O
TEMA, PODENDO NÃO REFLETIR
NECESSARIAMENTE A OPINIÂO / PONTO DE VISTA
DE QUAISQUER ORGANIZAÇÃO/EMPRESA LIGA OU
NÃO COM O AUTOR
● THIS PRESENTATION REFLECTS AUTHOR'S
PERSONAL OPINIONS AND IDEAS ON THE TOPIC
AND MAY NOT REFLECT NECESSARILY THE
OPINION/ VIEWPOINT OF ANY ORGANIZATION /
COMPANY WITH/WITHOUT RELATIONSHIP WITH
THE AUTHOR.
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Introdução | Batepapo
http://slidesha.re/1kQU0Yg @BR_LuanCestari
O que veremos
● OpenJDK
● Overview sobre desempenho
● Principais mudanças JVM e Tunning
○ Overview da Arquitetura de memória OpenJDK
○ Principais mudanças na versão 8
○ Top-Down e Botton-Up profiling e tunning
http://slidesha.re/1kQU0Yg @BR_LuanCestari
O que NÃO veremos (infelizmente)
● Muitos detalhes das diversas formas de
tunning e profiling
○ Motivo: tempo =(
http://slidesha.re/1kQU0Yg @BR_LuanCestari
OpenJDK
● JCP (Java Community Process)
● JSR (Java Specification Requests)
● JEP (JDK Enhancement Proposals)
https://java.net/projects/adoptajsr/pages/Home
https://www.jcp.org/en/home/index
http://slidesha.re/1kQU0Yg @BR_LuanCestari
OpenJDK
● Comunidades
○ SouJava
○ JUGs
● Participe =D
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Desempenho
● Tempo de resposta
● Logs
○ Erros de memória
■ OutOfMemoryError, Leaks, GC, crash
○ Uso de recursos
■ CPU, Disco, Rede, Banco de dados, etc
○ Concorrência
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Arquitetura de memória OpenJDK
Metaspace
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Principais mudanças na versão 8
● Começando pelos arquivos gerados .class:
○ A versão major do .class foi para 52 (0x34 hex)
■ ohhh =)
○ Magic number continua o mesmo (CA FE BA BE)
○ mudanças de estrutura por causa das JSR-292,
JSR-308 e JSR-335
■ JSR 335: Lambda Expressions
■ JSR 308:Type Annotations and the Checker
Framework
■ JSR 292: Supporting Dynamically Typed
Languages on the Java (Da Vinci Machine
project and InvokeDynamic)
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Mudanças | Parâmetros e arquitetura JVM
● Flags para JVM usar o Advanced Encryption
Standard (AES) da intel
○ -XX:+UseAES -XX:+UseAESIntrinsics
● Remoção da Permgen (e inclução da
Metaspace)
○ -XX:MaxMetaspaceSize
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Mudanças | Compact Profiles
● JEP 161: Compact Profiles
○ JVM pode rodar e compilar usar diferentes perfis
que minimizam memória
○ http://docs.oracle.
com/javase/8/docs/technotes/guides/compactprofiles
/
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Mudanças | Ferramentas no JDK
● jdeps
○ Análise de dependências
■ libraries e interno(-jdkinternals)
● Diagnóstico remoto com JMX
● Novas opções no jarsigner
● Nova java man page
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Mudanças | Outros
● Security
○ Algoritmos mais fortes para criptografia e cifragem
○ melhora na parte de entropia de geração dos
números randomicos
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Tunning e Profiling
● Top-Down / Bottom-Up
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Tunning e Profiling| Bottom-up
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Tunning e Profiling| Bottom-up
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Tunning e Profiling| Bottom-up
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Tunning e Profiling| Top-Down
● Mesma análise das versões anteriores
○ Uso do jvisualvm / jconsole para análise
○ Uso das memórias
■ GC Log (usando -verbosegc -XX:PrintGCDetails
)
■ Frequência e tempo de GC
■ Algoritmo de GC
○ Alocação de memória
■ LargePages (-XX:LargePageSizeInBytes=4m )
○ Demais opções JVM
○ Thread Dump (jstack)
○ Heap Dump (jmap -dump ...)
○ Etc
http://slidesha.re/1kQU0Yg @BR_LuanCestari
OpenJDK sempre melhorando!
● Exemplo no update 8u40
○ JEP 208: Java Packager Improvements
○ JEP 156: G1 GC: Reduce need for full GCs
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Futuro
● Twitter
● Ferramentas de análise da JVM
○ Baixíssimo uso de CPU e memory footprint
○ Triggers
○ Sample e contínuo
○ etc
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Muito Obrigado!
http://slidesha.re/1kQU0Yg @BR_LuanCestari
Dúvidas?
http://slidesha.re/1kQU0Yg
@BR_LuanCestari

Tunning jvm em java 8