introdução java virtual machine
TRANSCRIPT
![Page 1: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/1.jpg)
Java Virtual Machine
Bruno Coan
![Page 2: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/2.jpg)
Agenda
• Introdução a JVM• Parâmetros• Garbage Collection• Just in time compiler JIT• ClassLoader
![Page 3: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/3.jpg)
Java Virtual MachineO que é?
![Page 4: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/4.jpg)
Java Code (.java)
JAVAC compiler
JVM JVM
Byte Code (.class)
JVM
Windows Linux Mac
![Page 5: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/5.jpg)
Distribuições
• HotSpot – Oracle/Sun (base)• JRockit - Oracle/BEA• J9 – IBM.
![Page 6: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/6.jpg)
Scala
JVM
Byte Code
Clojure JRuby
![Page 7: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/7.jpg)
Linguagens que rodam na JVM
![Page 8: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/8.jpg)
Parâmetros
O que são?Para que servem?
![Page 9: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/9.jpg)
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
![Page 10: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/10.jpg)
Garbage Collection
![Page 11: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/11.jpg)
Mark-And-Sweep• Mark
• Sweep
![Page 12: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/12.jpg)
Hipótese das Gerações
• 95% dos objetos tem vida extremamente curta.
• O restante costuma ter vida longa.
![Page 13: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/13.jpg)
Generational Copying
Young Generation Old Generation
![Page 14: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/14.jpg)
HotSpot
Eden Survivor 0
Survivor 1
Young Ternured
Minnor Collect Major Collect
![Page 15: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/15.jpg)
Mark-And-Sweep + Compact
![Page 16: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/16.jpg)
Divisão de Memória - JVM
![Page 17: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/17.jpg)
Collector Serial
![Page 18: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/18.jpg)
Collector Parallel
![Page 19: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/19.jpg)
Collector Concurrent
![Page 20: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/20.jpg)
Garbage First – G1
![Page 21: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/21.jpg)
Ergonomics
• A partir java 1.5;• O algoritmo de Garbage Collection;• O tamanho da memória heap;• O compilador de tempo de execução.
![Page 22: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/22.jpg)
Just in Time Compiler - JIT
• Java 1.1 (Symantec)• Compilação dinâmica• Heurística
![Page 23: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/23.jpg)
Cliente
• Habilitado através do parâmetro –client;• Foco em inicialização rápida;• Deixa de fazer certas otimizações para
economizar memória;
![Page 24: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/24.jpg)
Servidor
• Habilitado através do parâmetro –server;• Performance a longo prazo;• Compilação mais agressiva;
![Page 25: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/25.jpg)
Recomendação
• Programe baseado em boas práticas;• O JIT faz o resto;
![Page 26: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/26.jpg)
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;
![Page 27: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/27.jpg)
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
![Page 28: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/28.jpg)
ClassLoaders Container
BootStrap Classloader
Extension Classloader
Application Classloader
Container ClassLoader
WebApp1 ClassLoader
WebApp2 ClassLoader
![Page 29: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/29.jpg)
ClassLoader Hell
• NoSuchMethodError;• ClassCastException;• Java 1.6 incluiu API JAXB 2.0
![Page 30: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/30.jpg)
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;
![Page 31: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/31.jpg)
![Page 32: Introdução Java virtual machine](https://reader030.vdocuments.site/reader030/viewer/2022013105/55cf9b8cbb61ebd7548b4679/html5/thumbnails/32.jpg)