Download - Introdução Java virtual machine
Java Virtual Machine
Bruno Coan
Agenda
• Introdução a JVM• Parâmetros• Garbage Collection• Just in time compiler JIT• ClassLoader
Java Virtual MachineO 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;