introdução java virtual machine

Post on 16-Aug-2015

175 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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;

top related