SlideShare uma empresa Scribd logo
1 de 32
Java Virtual Machine
Bruno Coan
Agenda
• Introdução a JVM
• Parâmetros
• Garbage Collection
• Just in time compiler JIT
• ClassLoader
Java Virtual Machine
O que é?
Java Code (.java)
JAVAC compiler
JVM JVM
Byte Code (.class)
JVM
Windows Linux Mac
Distribuições
• HotSpot – Oracle/Sun (base)
• JRockit - Oracle/BEA
• J9 – IBM.
Scala
JVM
Byte Code
Clojure JRuby
Linguagens que rodam na JVM
Parâmetros
O que são?
Para que servem?
Parâmetros
-Xmxs1024m Configuração de memória Heap
-Xmx1024m Configuração de memória Heap
-XX:MaxPermSize=128m Configuração da Permanent Generation
-verbose:gc Habilita log do garbage Collector
-Xint Desabilita o JIT
Garbage Collection
Mark-And-Sweep
• Mark
• Sweep
Hipótese das Gerações
• 95% dos objetos tem vida extremamente
curta.
• O restante costuma ter vida longa.
Generational Copying
Young
Generation
Old Generation
HotSpot
Eden
Survivor
0
Survivor
1
Young Ternured
Minnor Collect Major Collect
Mark-And-Sweep + Compact
Divisão de Memória - JVM
Collector Serial
Collector Parallel
Collector Concurrent
Garbage First – G1
Ergonomics
• A partir java 1.5;
• O algoritmo de Garbage Collection;
• O tamanho da memória heap;
• O compilador de tempo de execução.
Just in Time Compiler - JIT
• Java 1.1 (Symantec)
• Compilação dinâmica
• Heurística
Cliente
• Habilitado através do parâmetro –client;
• Foco em inicialização rápida;
• Deixa de fazer certas otimizações para
economizar memória;
Servidor
• Habilitado através do parâmetro –server;
• Performance a longo prazo;
• Compilação mais agressiva;
Recomendação
• Programe baseado em boas práticas;
• O JIT faz o resto;
Carregamento de classes
• Loading -Localiza o arquivo (.class) e carrega seu ByteCode;
• Linking
– Verification -Verifica se o ByteCode está correto;
– Preparation –Prepara estrutura para acomodar métodos,
atributos;
– Resolving –Carrega todas as dependências referenciadas
pela classe;
• Initializing –Blocos estáticos são executados e atributos
estáticos são inicializados;
ClassLoaders
• BootStrap
– Único que não possui pai;
– Carrega classes do rt.jar (java.lang);
• Extension
– Tem BootStrap como pai;
– Carrega classes da pasta lib/ext;
• Application
– Tem Extension como pai;
– Carrega classes do CLASSPATH;
BootStrap Classloader
Extension Classloader
Application Classloader
ClassLoaders Container
BootStrap Classloader
Extension Classloader
Application Classloader
Container ClassLoader
WebApp1
ClassLoader
WebApp2
ClassLoader
ClassLoader Hell
• NoSuchMethodError;
• ClassCastException;
• Java 1.6 incluiu API JAXB 2.0
Endorsed
• Configurado pelo parâmetro -Djava.endorsed.dirs=;
• Jars carredos antes do diretório ext ;
• Maneira de dizer para JVM que você confia em
determinado jar;
JVM Introdução
JVM Introdução

Mais conteúdo relacionado

Semelhante a JVM Introdução

Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Otávio Santana
 
Desmistificando Otimização de JVM
Desmistificando Otimização de JVMDesmistificando Otimização de JVM
Desmistificando Otimização de JVMSergio Lopes
 
Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)Helder da Rocha
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptxssuser980608
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9Helder da Rocha
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem JavaUFPA
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxDell Technologies
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiJoao Galdino Mello de Souza
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testesElias Nogueira
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 

Semelhante a JVM Introdução (20)

Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Java20141215 17[1]
Java20141215 17[1]Java20141215 17[1]
Java20141215 17[1]
 
Dr Java Virtual Machine
Dr Java Virtual MachineDr Java Virtual Machine
Dr Java Virtual Machine
 
Performance em Java
Performance em JavaPerformance em Java
Performance em Java
 
Desmistificando Otimização de JVM
Desmistificando Otimização de JVMDesmistificando Otimização de JVM
Desmistificando Otimização de JVM
 
Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)Gerência de Memória em Java - Parte I (2005)
Gerência de Memória em Java - Parte I (2005)
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
01 introducao ao java
01   introducao ao java01   introducao ao java
01 introducao ao java
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptx
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
A arquitetura modular do Java 9
A arquitetura modular do Java 9A arquitetura modular do Java 9
A arquitetura modular do Java 9
 
Java 01
Java 01Java 01
Java 01
 
Introdução a Linguagem Java
Introdução a Linguagem JavaIntrodução a Linguagem Java
Introdução a Linguagem Java
 
Projeto OpenJDK [Java8]
Projeto OpenJDK [Java8]Projeto OpenJDK [Java8]
Projeto OpenJDK [Java8]
 
Introducao logica2
Introducao logica2Introducao logica2
Introducao logica2
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio BucciantiLinux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
Linux Real-Time e Java Real Time, um mundo sem delays! por Flávio Buccianti
 
Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testes
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 

JVM Introdução

Notas do Editor

  1. Jvm é uma especificação, ela interpreta bytecode converte em comandos de máquina e os executa, isso é o que torna possível escrever um único código e executálo em várias plataformas.
  2. A variedade de jvms existente aumenta também a competitividade no mercado, pois cada fabricante melhora aspectos a cada versão, além de não ficar preso a um fabricante.
  3. São uma forma de fazer ajustes na JVM , e controlar detalhes de seu funcionamento como quantidade de memória
  4. Dificuldade de gerenciamento de memória para os desenvolvedores Java usa gc como? Objeto liberado fica disponível para ser coletado Porém não dá pra previnir quando ele será coletado.
  5. Quando se pensa em coleta de lixo, primeira coisa que vem na mente é um serviço que varre a memória de tempo em tempo e remove os objetos sem referencia
  6. Alto indice de mortalidade infantil entre objetos
  7. Parece mais custoso pois tem que copiar e apagar. Apesar de copiar ser custoso, isso é feito em apenas 5% dos objetos Então não apaga o restante, apenas marca a memória como livre para ser escrita
  8. Na hotSpot a memória é dividida da seguinte maneira. Os objetos são instanciados no espaço eden, após a primeira collection os objetos sobreviventes são copiados para um dos survivors e a partir de então são copiados entre os 2 survivors até serem considerados maduros. Em algum momento a old generation tbm se enche, então é necessário executar uma coleta, nesse pedaço de memória o algortimo usado é o M.A.S
  9. Como a gente viu o mark and sweep causa problemas de fragmentação, por isso o algoritmo executado tem mais uma fase chamada compact, que realiza a desfragmentação da memória. Agumas jvms como jrockit não se preocupam muito com essa fragmentação e executam o compact apenas quando necessário
  10. Ideal para máquinas que possuem processadores de apenas um nucleo
  11. Máquinas com processadores de muitos núcleos Perde tempo de sincronização
  12. Apenas interpretava bytecode e executava em linguagem de máquina Muito lenta Durante a execução do programa análisa e detecta pontos importantes e compila pra código de máquina otimizados Heuristicas (rollback) E descartar códigos compilados caso não sejam mais utilizados
  13. Hierarquia de Carregamento Traz segurança As aplicações podem criar seus próprios classloaders
  14. Container cria seu próprio class loader carrega classes do lib E um para cada app (contexto) classes do webinf/lib