JVM and Tools
Gleydson Lima
gleydson@esig.group
JVM
• “Write once, run anyware”
• Multithreading nativo.
• Garbage Collection
• Bytecode verifier (segurança)
• Carregamento dinâmico de classes (Dynamic Classloading)
• As classes só são carregadas no momento que precisam ser usadas.
• Gerenciada e Monitorada (profiler, VisualGC, JConsole, JMX, etc)
• Interpretada mas compilada com JIT (Just in Time Compiler)
Linguagens e JVM
• A plataforma Java é diferente da linguagem Java.
• A Java Virtual Machine (JVM) é uma plaforma de execução de bytecodes.
Dezenas de
linguagens de
programação
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
Outras implementações
Compilação
• JIT – Just In Time Compiler
• Compilação previa a interpretação do código.
• AOT – Ahead of Time Compiler
• Compilação antecipada (ahead of time = antes do tempo)
• Não suportada pela JVM tradicional (o AOT da JVM é apenas do bytecode)
• Suportada pela GraalVM
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM Memory Model
• Cada Thread possui sua área de variáveis locais,
denominado Thread Stack.
• 1 MB por padrão (java -
XX:ThreadStackSize=1024)
JVM and Tools - ESIG Academy
Garbage Collection
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
Generation Garbage Collector
Generation Garbage Collector
Eden: Área inicialmente alocada para a
maioria dos objetos.
Espaço Sobrevivente (heap): O pool que
contém objetos que sobreviveram à
coleta de lixo do espaço Eden.
Geração tenured (heap): O pool que
contém objetos que já existiram por
algum tempo no espaço sobrevivente.
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
Heap Memory
PermGen x MetaSpace
• PermGem é um espaço de heap especial separado do heap de
memória principal.
• Armazena métodos estáticos, classes, objetos estáticos, etc.
PermGen x MetaSpace
• Metaspace é um novo espaço de memória que substituí o PermGen
Space.
• Ele está vinculado a “Native Memory” que cresce automaticamente
por padrão.
• Ainda é possível estabelecer limites, caso queira:
Exceptions
Algoritmo de GC
• Mark-Sweep
GC Roots
• Threads ativas
• Variáveis estáticas
• Variáveis locais das threads
• Referências JNI
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
Mark Phase
Mark
Sweep
JVM and Tools - ESIG Academy
Garbage Collection
• JVM tem 4 tipos de algoritmos de GC:
• Serial Garbage Collector
• Parallel Garbage Collector
• CMS Garbage Collector
• G1 Garbage Collector
Serial Collector
• Uma uma única thread para todas as coletas (menores e maiores).
• Algoritmo mais simples e exige menos recursos.
• Aumenta a parada da aplicação, pois uma única thread fará o GC e
todas as outras ficarão aguardando.
• Recomendado para dispositivos de pequena memória ou aplicações
monousuário (desktop).
Parallel GC
• Múltiplas threads para coletas menores e uma thread para coleta
maior.
• Também congela outros threads de aplicativo ao executar GC
• Parallel Old Collector – Multiplas threads para coletas principais e
secundárias. Desde o Java 7u4.
• Maior troughput em sistemas multi-cores.
CMS - Concurrent Mark and Sweep
• Use múltiplas GC Threads para a coleta de lixo.
• Projetado para aplicações que precisam de pausas menores de GC e
podem gerenciar seus recursos com o GC enquanto executam.
• Executam concorrentemente com a aplicação. Não pausam a App.
• Os aplicativos que usam este tipo de GC respondem mais lentamente,
em média, mas não param de responder para realizar a coleta de lixo.
• Usam mais recursos que o Parallel Collector.
• Bom para aplicações gerais no servidor.
CMS - Concurrent Mark and Sweep
• Se 98% do tempo for gasto com GC e liberar apenas 2% do Heap, um
OutOfMemory é disparado. (-XX:-UseGCOverheadLimit para
disabilitar)
• Depreciado no Java 9
• Retirado de vez no Java 14.
G1 Garbage Collector
• G1 (Garbage First) Garbage Collector foi projetado para aplicativos
executados em máquinas multiprocessadas com grande espaço de
memória.
• Está disponível desde a atualização 4 do JDK7 e em versões posteriores.
• Substituto do CMS.
• O coletor G1 particiona o heap em um conjunto de sub-regiões de heap
de mesmo tamanho, cada uma com um intervalo contíguo de memória
virtual.
JVM and Tools - ESIG Academy
CMS x G1
• Foco inicial do G1 é fornecer uma solução para Apps que exigem
grandes heaps com latência de GC limitada.
• Isso significa tamanhos de heap de cerca de 6 GB ou mais, e tempo de
pausa estável e previsível abaixo de 0,5 segundos.
• Padrão a partir do JDK 9.
JVM and Tools - ESIG Academy
Load Average
Em resumo, estes são os valores médios dos processos esperando
execução ou em execução nos últimos períodos de 1, 5 e 15 minutos.
Load Average
regra simples:
LA >> que o número de CPUs está provavelmente bem ocupado, ou
travado por algum gargalo ou falta de recurso crítico.
LA << mais baixo que o número de CPUs está provavelmente folgado.
Load Average - Multi-cores
Top
htop
JStack
ps aux | grep java
jstack PID
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html
Thread State
JStack Thread State
Conectores Apache x Tomcat/JBoss
AJP
Implementado pelo mod_jk
HTTP
Proxy ou Balancers
Redireciona requisição HTTP
Conector e Tomcat
● Pool de Threads diferentes
○ http-xxxx
○ ajp-xxxxx
Thread por Request
Request 1
Request 2
Request 3
Dispatcher
Conector-
Thread-01
Conector-
Thread-02
Conector-
Thread-03
...
Conector-
Thread-N
Thread Pool
Request Thread
Event Loop
JMX
• A Java Management Extensions (JMX) é uma API padrão para
gerenciamento e monitoramento de recursos tais como aplicações,
dispositivos, serviços e a máquina virtual Java (JVM).
• Foi desenvolvida através de um processo Java Community Process
(JCP) que envolveu a JSR-003 (Java Management Extensions) e a JSR-
160 (JMX Remote API).
DataSource AppServer (Tomcat ou Jboss)
myAppDS
BD
JVM and Tools - ESIG Academy
Monitoramento na ESIG Group
App
SOs
Anything
Exporter App
Node Exporter
Any Exports
Prometheus
database
Vamos ver alguns casos...
GraalVM
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JIT x AOT x Go (Native)
http://macias.info/entry/201912201300_graal_aot.md
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;
public class PolyglotJavaAndJs {
public static void main(String[] args) {
Context context = Context.newBuilder().allowIO(true).build();
Value array = context.eval("js", "[1,2,42,4]");
int result = array.getArrayElement(2).asInt();
System.out.println(result);
}
}
https://github.com/graalvm/examples
JVM and Tools - ESIG Academy
JVM and Tools - ESIG Academy
Conhecimento compartilhado.
Obrigado!
esig.group (84) 3034-9310

Mais conteúdo relacionado

PPTX
Apresentação PGDAY - Replicação Nativa - PostgreSQL
PPT
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
PDF
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
PPTX
Introdução Java virtual machine
PDF
PostgreSQL Ha
PPTX
Entendendo o paralelismo no SQL Server
PPT
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
PPTX
Aplicando o poder de uma GPU no SQL Server
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Monitoramento contínuo em dia de pico de consumo ajuda a determinar o número ...
Funcionamento e otimização da Garbage Collection na Oracle Hotspot JVM
Introdução Java virtual machine
PostgreSQL Ha
Entendendo o paralelismo no SQL Server
Medindo e Modelando o Desempenho de Aplicações em um Ambiente Virtual
Aplicando o poder de uma GPU no SQL Server

Mais procurados (18)

PDF
TDC2018SP | Trilha Serveless - Pra que SERVErless?
PPTX
Estratégias de migração para cloud
PPTX
Aplicando processamento paralelo em instruções SQL
PDF
Testes de escalabilidade usando cloud
PDF
HA em PostgreSQL: O Elefante disponível para além do infinito
PPTX
Desafios de Migrar para o Java 11+
PPTX
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
PDF
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
PDF
Como definir a quantidade de workers para sua aplicação
PDF
NoSQL: Uma análise crítica
PDF
Cache e Performance (in portuguese)
PPT
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
PDF
OpenLAP Multimaster
PDF
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
PDF
Pgquarrel
PDF
Copa do mundo no brasil interagindo com os torcedores em tempo real
PDF
Desmistificando Replicação no PostgreSQL
PDF
Ruby profiling
TDC2018SP | Trilha Serveless - Pra que SERVErless?
Estratégias de migração para cloud
Aplicando processamento paralelo em instruções SQL
Testes de escalabilidade usando cloud
HA em PostgreSQL: O Elefante disponível para além do infinito
Desafios de Migrar para o Java 11+
Análise de Capacidade e Desempenho em sistemas online utilizando no conceito ...
Há quanto tempo você não revisa seu ambiente de virtualização de servidores V...
Como definir a quantidade de workers para sua aplicação
NoSQL: Uma análise crítica
Cache e Performance (in portuguese)
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
OpenLAP Multimaster
Arquiteturas Paralelas e Distribuídas - Aula 4 - Arquitetura Superescalar
Pgquarrel
Copa do mundo no brasil interagindo com os torcedores em tempo real
Desmistificando Replicação no PostgreSQL
Ruby profiling
Anúncio

Semelhante a JVM and Tools - ESIG Academy (20)

PDF
CON22150 - The Future of JVM Performance Tuning
PDF
Java Garbage Collectors - HotSpot
PDF
Gerência de Memória em Java - Parte II
PDF
Desmistificando Otimização de JVM
PDF
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
ODP
Performance em Java
PDF
Java 9, 10 e ... 11
PDF
Imergindo jvm[Apresentação ]
PPTX
Java Virtual Threads.pptx
PDF
Jsummit 2014
PDF
Gerência de Memória em Java - Parte I (2005)
PDF
Java 01
PDF
Memória e Garbage Collection na JVM
KEY
Dr Java Virtual Machine
PDF
Imergindo na JVM
PDF
Gerenciamento de Memória pela JVM
PDF
Introdução ao java
PDF
Projeto OpenJDK [Java8]
ODP
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
PDF
Introdução a tecnologia Java
CON22150 - The Future of JVM Performance Tuning
Java Garbage Collectors - HotSpot
Gerência de Memória em Java - Parte II
Desmistificando Otimização de JVM
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Performance em Java
Java 9, 10 e ... 11
Imergindo jvm[Apresentação ]
Java Virtual Threads.pptx
Jsummit 2014
Gerência de Memória em Java - Parte I (2005)
Java 01
Memória e Garbage Collection na JVM
Dr Java Virtual Machine
Imergindo na JVM
Gerenciamento de Memória pela JVM
Introdução ao java
Projeto OpenJDK [Java8]
Apresentação Java, SOA, MICROSERVICE, HTTP, HTTPS, VERSIONAMENTO DE CONTRATO,
Introdução a tecnologia Java
Anúncio

Último (13)

PDF
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
PPT
10_ slides de Reuso sommerville cap 10.ppt
PPT
09_Evolucao de software e_Refatoracao.ppt
PPT
07_slides de Estilos_Arquiteturais sommerville.ppt
PPT
00_Apresentacao sobre o livro do sommerville_ES.ppt
PPT
06_slide de Arquitetura_de_Software .ppt
PDF
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
PPT
04_slide Requisitos de software_capitulo4
PDF
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
PDF
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
PPT
05_slide especificacao de sistemas de software e a uml UML.ppt
PPT
03_slide de Gerenciamento de Projetos .ppt
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
10_ slides de Reuso sommerville cap 10.ppt
09_Evolucao de software e_Refatoracao.ppt
07_slides de Estilos_Arquiteturais sommerville.ppt
00_Apresentacao sobre o livro do sommerville_ES.ppt
06_slide de Arquitetura_de_Software .ppt
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
04_slide Requisitos de software_capitulo4
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
05_slide especificacao de sistemas de software e a uml UML.ppt
03_slide de Gerenciamento de Projetos .ppt

JVM and Tools - ESIG Academy

  • 1. JVM and Tools Gleydson Lima gleydson@esig.group
  • 2. JVM • “Write once, run anyware” • Multithreading nativo. • Garbage Collection • Bytecode verifier (segurança) • Carregamento dinâmico de classes (Dynamic Classloading) • As classes só são carregadas no momento que precisam ser usadas. • Gerenciada e Monitorada (profiler, VisualGC, JConsole, JMX, etc) • Interpretada mas compilada com JIT (Just in Time Compiler)
  • 3. Linguagens e JVM • A plataforma Java é diferente da linguagem Java. • A Java Virtual Machine (JVM) é uma plaforma de execução de bytecodes. Dezenas de linguagens de programação
  • 11. Compilação • JIT – Just In Time Compiler • Compilação previa a interpretação do código. • AOT – Ahead of Time Compiler • Compilação antecipada (ahead of time = antes do tempo) • Não suportada pela JVM tradicional (o AOT da JVM é apenas do bytecode) • Suportada pela GraalVM
  • 15. JVM Memory Model • Cada Thread possui sua área de variáveis locais, denominado Thread Stack. • 1 MB por padrão (java - XX:ThreadStackSize=1024)
  • 21. Generation Garbage Collector Eden: Área inicialmente alocada para a maioria dos objetos. Espaço Sobrevivente (heap): O pool que contém objetos que sobreviveram à coleta de lixo do espaço Eden. Geração tenured (heap): O pool que contém objetos que já existiram por algum tempo no espaço sobrevivente.
  • 25. PermGen x MetaSpace • PermGem é um espaço de heap especial separado do heap de memória principal. • Armazena métodos estáticos, classes, objetos estáticos, etc.
  • 26. PermGen x MetaSpace • Metaspace é um novo espaço de memória que substituí o PermGen Space. • Ele está vinculado a “Native Memory” que cresce automaticamente por padrão. • Ainda é possível estabelecer limites, caso queira:
  • 28. Algoritmo de GC • Mark-Sweep
  • 29. GC Roots • Threads ativas • Variáveis estáticas • Variáveis locais das threads • Referências JNI
  • 33. Mark
  • 34. Sweep
  • 36. Garbage Collection • JVM tem 4 tipos de algoritmos de GC: • Serial Garbage Collector • Parallel Garbage Collector • CMS Garbage Collector • G1 Garbage Collector
  • 37. Serial Collector • Uma uma única thread para todas as coletas (menores e maiores). • Algoritmo mais simples e exige menos recursos. • Aumenta a parada da aplicação, pois uma única thread fará o GC e todas as outras ficarão aguardando. • Recomendado para dispositivos de pequena memória ou aplicações monousuário (desktop).
  • 38. Parallel GC • Múltiplas threads para coletas menores e uma thread para coleta maior. • Também congela outros threads de aplicativo ao executar GC • Parallel Old Collector – Multiplas threads para coletas principais e secundárias. Desde o Java 7u4. • Maior troughput em sistemas multi-cores.
  • 39. CMS - Concurrent Mark and Sweep • Use múltiplas GC Threads para a coleta de lixo. • Projetado para aplicações que precisam de pausas menores de GC e podem gerenciar seus recursos com o GC enquanto executam. • Executam concorrentemente com a aplicação. Não pausam a App. • Os aplicativos que usam este tipo de GC respondem mais lentamente, em média, mas não param de responder para realizar a coleta de lixo. • Usam mais recursos que o Parallel Collector. • Bom para aplicações gerais no servidor.
  • 40. CMS - Concurrent Mark and Sweep • Se 98% do tempo for gasto com GC e liberar apenas 2% do Heap, um OutOfMemory é disparado. (-XX:-UseGCOverheadLimit para disabilitar) • Depreciado no Java 9 • Retirado de vez no Java 14.
  • 41. G1 Garbage Collector • G1 (Garbage First) Garbage Collector foi projetado para aplicativos executados em máquinas multiprocessadas com grande espaço de memória. • Está disponível desde a atualização 4 do JDK7 e em versões posteriores. • Substituto do CMS. • O coletor G1 particiona o heap em um conjunto de sub-regiões de heap de mesmo tamanho, cada uma com um intervalo contíguo de memória virtual.
  • 43. CMS x G1 • Foco inicial do G1 é fornecer uma solução para Apps que exigem grandes heaps com latência de GC limitada. • Isso significa tamanhos de heap de cerca de 6 GB ou mais, e tempo de pausa estável e previsível abaixo de 0,5 segundos. • Padrão a partir do JDK 9.
  • 45. Load Average Em resumo, estes são os valores médios dos processos esperando execução ou em execução nos últimos períodos de 1, 5 e 15 minutos.
  • 46. Load Average regra simples: LA >> que o número de CPUs está provavelmente bem ocupado, ou travado por algum gargalo ou falta de recurso crítico. LA << mais baixo que o número de CPUs está provavelmente folgado.
  • 47. Load Average - Multi-cores
  • 48. Top
  • 49. htop
  • 50. JStack ps aux | grep java jstack PID https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr016.html
  • 53. Conectores Apache x Tomcat/JBoss AJP Implementado pelo mod_jk HTTP Proxy ou Balancers Redireciona requisição HTTP
  • 54. Conector e Tomcat ● Pool de Threads diferentes ○ http-xxxx ○ ajp-xxxxx
  • 55. Thread por Request Request 1 Request 2 Request 3 Dispatcher Conector- Thread-01 Conector- Thread-02 Conector- Thread-03 ... Conector- Thread-N Thread Pool
  • 58. JMX • A Java Management Extensions (JMX) é uma API padrão para gerenciamento e monitoramento de recursos tais como aplicações, dispositivos, serviços e a máquina virtual Java (JVM). • Foi desenvolvida através de um processo Java Community Process (JCP) que envolveu a JSR-003 (Java Management Extensions) e a JSR- 160 (JMX Remote API).
  • 59. DataSource AppServer (Tomcat ou Jboss) myAppDS BD
  • 61. Monitoramento na ESIG Group App SOs Anything Exporter App Node Exporter Any Exports Prometheus database
  • 62. Vamos ver alguns casos...
  • 66. JIT x AOT x Go (Native) http://macias.info/entry/201912201300_graal_aot.md
  • 70. import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Value; public class PolyglotJavaAndJs { public static void main(String[] args) { Context context = Context.newBuilder().allowIO(true).build(); Value array = context.eval("js", "[1,2,42,4]"); int result = array.getArrayElement(2).asInt(); System.out.println(result); } }