SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
JVM Internal 
Otávio Santana 
@otaviojava
Comunidades 
● @javabahia 
● @soujava 
● @java 
● @soujavalivre
Sumário 
● Falar da linguagem Java 
● Histórico das versões 
● Linguagens da JVM 
● Tipo de valores para a JVM 
● Registradores 
● Bytecodes
Java 
➢ Uma das linguagens mais usadas no mundo 
➢ Uma comunidade muito forte 
➢ Recolhe memória de modo automático 
➢ Multi-plataforma 
➢ Linguagem 
➢ Plataforma 
➢ Máquina virtual
Funcionamento Externo 
● JCP (Java Community Process) 
● JSR(Java Specification Requests) 
● JEP (JDK Enhancement Proposals) 
JEP 174: Nashorn JavaScript Engine 
JEP 156: G1 GC: Reduce need for full GCs 
● JSR 336 = Java 7 
1) JSR 203 : ("NIO.2") 
2) JSR 292 : Invoke Dynamic 
3) JSR 334 :COIN
OpenJDK 
hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk_1_9 
sh ./get_source.sh 
./configure 
make install
Empresas 
AMD 
Apple 
Azul Systems, Inc. 
Canonical 
Google 
IBM 
Intel 
Oracle 
RedHat 
SAP Software Company 
Stratus 
Twitter
Histórico da Plataforma 
● Em 1995 foram lançadas betas do Java 
● 1.0 em janeiro de 1996 foi a primeira versão estável 
● Na 1.1 lançada em fevereiro de 1997 
● Grande melhorias no evento do AWT 
● Inner classes, JavaBeans, JDBC , RMI 
● Reflection
Histórico da Plataforma 
● No Java 1.2 de dezembro de 1998 
Kestrel 
● palavra-chave strictfp, Swing, JIT, Java Plug-in 
● Java IDL,Collections framework 
● No java 1.3 em maio de 2000 
● JavaSound, Java Naming and Directory Interface (JNDI) 
Java Platform Debugger Architecture (ACDP)
Histórico da Plataforma 
Merlin 
● No Java 1.4 fevereiro de 2002 
● Primeira com o JCP, NIO, XML, JDBC 3.0, API de Loggin, assert, 
expressões regulares 
● No java 1.5 setembro de 2004 
● Generics, Autoboxing/Unboxing, Varargs, Annotations
Histórico da Plataforma 
● No Java 1.6 dezembro de 2006 
● JDBC 4.0, Rhino, Java Compiler API, API WebServices 
● No Java 1.7 julho de 2011 
● NIO2, OpenJDK referência, Diamond, Coin
Histórico da Plataforma 
● No Java 1.8 dezembro de 2006 
● Lambda, Stream, Nashorn 
● No Java 1.9 julho de 2016 
● Cloud, MoneyAPI, Sumatra, JavaFX
Linguagem, Plataforma, JVM 
● Linguagem: if, do, while,Object, herança 
● JSE ( NIO, Collections) 
● JVM (Multiplataforma, GC)
Java Program 
JVM 
JJVVMM JJVVMM JJVVMM JJVVMM
JVM 
Java 
C/C++ 
XML 
Outras
JVM 
4 
3.5 
3 
2.5 
2 
1.5 
1 
0.5 
0 
2008 2009 2010 2011 2012 2013 2014 
Java 
C/C++ 
Outras
JVM 
HH 
OOT 
T 
SS 
PP 
OOT 
T 
J 
R 
OCKI 
T 
OPE 
NJ 
DK
JVM
Tipos 
Primitivos 
Referência 
numéricos 
booleano 
returnAdress 
flutuante 
inteiro 
float 
double 
byte 
short 
chart 
int 
long 
classe 
interface 
Array
Primitivos 
Nome Size variação default Tipo 
byte 8 -2⁷ até 2⁷ 0 inteiro 
short 16 -2¹⁵ até 2¹⁵ 0 inteiro 
integer 32 -2³² até 2³¹ 0 inteiro 
long 64 -2⁶³ até 2⁶³ 0 inteiro 
char 16 UFT-8 'u0000' inteiro 
Float 32 0 flutuante 
Double 64 byte 0 flutuante 
boolean int false booleano 
returnAddress nulo ponteiro
Registradores 
Pilhas 
Nativas PPCC c coouunnteterr 
HHeeaapp MMeeththoodd A Arreeaa PPilihlhaa J Jaavvaa Pilhas 
● Heap: instâncias 
● Method Area: classes 
● Pilha Java: métodos java 
● Pilha navita: pilhas nativas 
● PC Counter: execução 
Nativas
Registradores em Thread 
hheeaapp 
Thread 1 
PC Counter 
Pilha Java 
Pilha 
Nativa 
Thread 2 
PC Counter 
Pilha Java 
Pilha 
Nativa 
Thread 3 
OObbjejetoto 
OObbjejetoto 
PC Counter 
Pilha Java 
Pilha 
Nativa 
MMeeththoodd A Arreeaa 
OObbjejetoto OObbjejetoto 
OObbjejetoto 
OObbjejetoto OObbjejetoto OObbjejetoto 
cclalassss cclalassss 
cclalassss cclalassss
PC e Pilha Navita 
● PC 
● Pilha Nativa 
Pilhas 
Nativas 
Pilhas 
Nativas 
?? ?? ?? ?? 
PPCC 
rreetuturrnnAAddrreessss 
? ? ? 
? ?
Pilhas Java 
● Definida no tempo de 
compilação 
● Unidade 32 bits 
● Byte, short, chart para int 
Frame Data 
PPilihlhaass JJaavvaa 
Frame 
Pilha 
De 
Operações 
Pilha 
De 
Variáveis 
Frame 
Pilha 
De 
Operações 
Frame Data 
Pilha 
De 
Variáveis
Operação e 
variável 
referência 
int 
PPilihlhaa d dee v vaarriáiávveeisis 
double 
● public int doInscante(int a, double b); 
● public static int doClass(int a, double b); 
int 
PPilihlhaa d dee v vaarriáiávveeisis 
double
10 
PPilihlhaa d dee o oppeerraaççõõeess 
10 
20 
● public int doInscante(int a, int b); 
● DoInstance(10,20); 
PPilihlhaa d dee o oppeerraaççõõeess 
30 
PPilihlhaa d dee o oppeerraaççõõeess 
Operação e variável
Operação e variável 
10 
10.10 
PPilihlhaa d dee o oppeerraaççõõeess 
PPilihlhaa d dee o oppeerraaççõõeess 
● public double doInscante(double a, double b); 
● DoInstance(10.10d,20.20); 
10.10 
20.20 
30.30 
PPilihlhaa d dee o oppeerraaççõõeess
MethodArea 
● O qualified da classe 
● O qualified da classe pai 
● Informação se é uma classe ou interface 
● Os modificadores 
● A lista com os qualifieds das interfaces 
● Constant Pool (informações dos métodos, atributos, 
referência da classe, referência da ClassLoader)
Code Cache 
● Código Compilado pelo JIT 
● Just In TIME (Deixa o código 
mais rápido em tempo de 
execução o tranformando em 
nativo) 
● Junto com o Heap
Estrutura de uma classe 
● Magic: #CAFEBABE 
● Menor e maior
Estrutura de uma Classe 
➢ JDK 1.0 -> major version 45 e minor version 3 
➢ JDK 1.1 -> major version 45 e minor version 3 
➢ JDK 1.2 -> major version 46 e minor version 0 
➢ JDK 1.3 -> major version 47 e minor version 0 
➢ JDK 1.4 -> major version 48 e minor version 0 
➢ JDK 1.5 -> major version 49 e minor version 0 
➢ JDK 1.6 -> major version 50 e minor version 0 
➢ JDK 1.7 -> major version 51 e minor version 0 
➢ JDK 1.8 -> major version 52 e minor version 0 
➢ JDK 1.9 -> major version 52 e minor version 0
Estrutura de uma Classe 
● ACC_PUBLIC - flag método, atributo públicos 
● ACC_PRIVATE - flag para para privados 
● ACC_PROTECTED - protected 
● ACC_STATIC - stático 
● ACC_FINAL - final 
● ACC_SYNCHRONIZED - indica um método sincronizado 
● ACC_BRIDGE - indica que o método foi gerado pelo compilador 
● ACC_VARARGS - indica que é varags 
● ACC_NATIVE - nativo 
● ACC_ABSTRACT - abstrato 
● ACC_STRICT - indica que o método é strict 
● ACC_SYNTHETIC - indica que o método não é “original”
Constant Pool 
●Métodos 
●Atributos 
●Índice e um vetor 
B byte signed byte 
C char 
D double 
F float 
I int 
J long 
L Classname ; referência 
S short 
Z boolean 
[ referência de um vetor 
[[ referência de uma matriz 
double dobro(double d) =(D)D 
Double dobro(Double d) =(Ljava/lang/Double;)Ljava/lang/Double 
void processar(Object o)(Ljava/lang/Object;)V 
Int somar(int a, float f);=(IF)I
Byte Codes 
✔ i para inteiro 
✔ l para long 
✔ s para short 
✔ b para byte 
✔ c para char 
✔ f para float 
✔ d para double 
✔ a para referência 
●Byte ação ou operação 
●Tipos específicos 
●Byte, short, chart para int
Byte Codes 
✔ adicionar: iadd, ladd, fadd, dadd. 
✔ subtrair: isub, lsub, fsub, dsub. 
✔ multiplicar: imul, lmul, fmul, dmul. 
✔ divisão: idiv, ldiv, fdiv, ddiv. 
✔ resto: irem, lrem, frem, drem. 
✔ negação: ineg, lneg, fneg, dneg. 
✔ deslocar: ishl, sidh, iushr, lshl, lshr, lushr. 
✔ bit a bit 'or': ior, lor. 
✔ bit a bit 'and': iand, a terra. 
✔ bit a bit ou exclusivo: ixor, lxor. 
✔ Variável local incremente: iinc. 
✔ Comparação: dcmpg, dcmpl, fcmpg, fcmpl, lcmp. 
✔ Conversão(promoção): i2l, i2f, i2d, l2f, l2d, e f2d 
✔ Conversão (encurtar): i2b, i2c, i2s, l2i, f2i, f2l, d2i,d2l, e d2f
Byte Codes 
✔ invokevirtual - chama um método de uma instância 
✔ invokeinterface -chama um método de uma interface 
✔ invokespecial -chamada de um método privado ou da 
super classe 
✔ invokestatic -realiza a chamada de um método estático 
✔ invokedynamic - método que constrói um objeto 
✔ ireturn,lreturn, freturn, dreturn e areturn - retorno 
✔ athrow -exceção 
✔ monitorenter e monitorexit - sincronizados
Demos
Heap 
Referência 
●Instâncias 
●Gerenciamento de memória 
●Pool de objetos 
●Informações da classe 
●representação do array=n*[referência 
hheeaapp 
Objeto 
ObjetoPool 
referência 
methodArea 
Pool de Objetos
Heap 
Classe 
Tamanho 
Referência 
● Instâncias 
● Gerenciamento de memória 
● Pool de objetos 
● Informações da classe 
● representação do array=n*[referência 
Classe 
Tamanho 
Referência 
Classe 
Tamanho 
Referência 
Referência
Criar Objetos 
✔ Carregar o arquivo para a JVM 
✔ Implementa a interface java.lang.Class 
✔ ClassLoader: boot-strap, não-definido 
✔ Linkar: verificar código de segurança, estrutura 
✔ Chamar o método construtor 
Linkar 
Objeto 
Classe.class 
ClassLoader 
Class 
methodArea 
JVM 
Carregar
Class Loarder 
Bootstrap Class Loader 
Extension Class Loader 
System Class Loader 
Usuário Class Loaders 
Usuário Class Loaders 
✔ Bootstrap- linguagem (código confiável) 
✔ Extension – plataforma 
✔ System – da aplicação 
✔ Usuario – a gosto do freguês (servidores) 
Usuário Class Loaders 
Usuário Class Loaders
Java 9 
● Build: 34 
● https://jdk9.java.net/download/ 
● Java 8 rápido
Java 9 
Reflections wrappers Regex Security Core 
250 
200 
150 
100 
50 
0 
Java 8 - Process 
Java 9 -Process 
Java 8 - Memory 
Java 9 -Memory
Shenandoah 
● Gerenciar um número maior de memória 
● 100GG 
● 8 cores
Melhorias no GC 
8 1 5 
2 20 10 
5 12 4 
10 2 
● Remove combinações depreciadas 
● Strings Deduplication 
● Segmented Code Cache 
● Shenandoah 
8 1 1 5 
2 20 10 
5 4 12 
10 4 2
Strings duplication 
75 
25 
Heap 
Another objects String 
● 25% do Heap é Strings 
● 13.5% String duplicadas 
String inside Heap 
85 
15 
String Strings duplicates
Segmented 
Code Cache 
● JVM internal (non-method) code 
● Profiled-code 
● Non-profiled code
Novidades 
● Escrita/leitura leva para JSON 
● Generics para primitives 
● builders para Collections 
● Literal para Collections 
● Process API Updates 
● Smart Java Compilation 
● http 2.0 cliente
Novidades 
● List<String> list = List.of(a, b, c); 
● Set<String> set = Set.of(d, e, f, g); 
● Map<String,String> map = 
Map.of(k1, V1);//not collection 
● List<Integer> list = #[ 1, 2, 3 ];
Money Api 
● Cuida do dinehiro 
● Formata 
● Arredondamento 
● Cotações
Measurement API 
● Unidade de medida 
● Padroniza 
● Formata 
● Operações (convert, add, subtract)
Thank you 
Otávio Santana 
@otaviojava

Más contenido relacionado

La actualidad más candente

Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infowayLucas Aquiles
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...iMasters
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017Vitor Mattos
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasKirmayr tomaz
 
Introdução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoIntrodução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoBruno Lopes
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
PHP - Uma Pequena Introducao
PHP - Uma Pequena IntroducaoPHP - Uma Pequena Introducao
PHP - Uma Pequena Introducaojonatasoliveira
 

La actualidad más candente (9)

Oficina groovy grails - infoway
Oficina  groovy grails - infowayOficina  groovy grails - infoway
Oficina groovy grails - infoway
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
PHP Experience 2016 - [Palestra] Vagrant, LXC, Docker, etc: Entenda as difere...
 
Xdebug seus problemas acabaram - tdc floripa 2017
Xdebug   seus problemas acabaram - tdc floripa 2017Xdebug   seus problemas acabaram - tdc floripa 2017
Xdebug seus problemas acabaram - tdc floripa 2017
 
Groovy grails
Groovy grailsGroovy grails
Groovy grails
 
Funcionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticasFuncionamento interno do node.js e boas práticas
Funcionamento interno do node.js e boas práticas
 
Introdução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderosoIntrodução a Grails: Um framework veloz e poderoso
Introdução a Grails: Um framework veloz e poderoso
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
PHP - Uma Pequena Introducao
PHP - Uma Pequena IntroducaoPHP - Uma Pequena Introducao
PHP - Uma Pequena Introducao
 

Destacado

Ppt copa do mundo slide mestre
Ppt copa do mundo   slide mestrePpt copa do mundo   slide mestre
Ppt copa do mundo slide mestreHellen Sardy
 
Laudo arena 2013
Laudo arena 2013Laudo arena 2013
Laudo arena 2013ochaves
 
Copa do Mundo 2014 - Aspectos Econômicos, Políticos e Sociais
Copa do Mundo 2014 - Aspectos Econômicos, Políticos e SociaisCopa do Mundo 2014 - Aspectos Econômicos, Políticos e Sociais
Copa do Mundo 2014 - Aspectos Econômicos, Políticos e SociaisGabriel Bovi Lorandi
 
Lotofacil e a biblia
Lotofacil e a bibliaLotofacil e a biblia
Lotofacil e a bibliaorlandoneves
 
Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...
Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...
Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...Ministério da Justiça
 
10 Ways Your Boss Kills Employee Motivation
10 Ways Your Boss Kills Employee Motivation10 Ways Your Boss Kills Employee Motivation
10 Ways Your Boss Kills Employee MotivationOfficevibe
 
The Great State of Design with CSS Grid Layout and Friends
The Great State of Design with CSS Grid Layout and FriendsThe Great State of Design with CSS Grid Layout and Friends
The Great State of Design with CSS Grid Layout and FriendsStacy Kvernmo
 

Destacado (10)

Apatridia
Apatridia Apatridia
Apatridia
 
Ppt copa do mundo slide mestre
Ppt copa do mundo   slide mestrePpt copa do mundo   slide mestre
Ppt copa do mundo slide mestre
 
Laudo arena 2013
Laudo arena 2013Laudo arena 2013
Laudo arena 2013
 
Copa do Mundo 2014 - Aspectos Econômicos, Políticos e Sociais
Copa do Mundo 2014 - Aspectos Econômicos, Políticos e SociaisCopa do Mundo 2014 - Aspectos Econômicos, Políticos e Sociais
Copa do Mundo 2014 - Aspectos Econômicos, Políticos e Sociais
 
Lotofacil e a biblia
Lotofacil e a bibliaLotofacil e a biblia
Lotofacil e a biblia
 
Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...
Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...
Guia para o uso do sistema interamericano de Direitos Humanos na proteção de ...
 
Marco de Segurança no Futebol
Marco de Segurança no FutebolMarco de Segurança no Futebol
Marco de Segurança no Futebol
 
5 Storytelling Lessons From Superhero Stories
5 Storytelling Lessons From Superhero Stories5 Storytelling Lessons From Superhero Stories
5 Storytelling Lessons From Superhero Stories
 
10 Ways Your Boss Kills Employee Motivation
10 Ways Your Boss Kills Employee Motivation10 Ways Your Boss Kills Employee Motivation
10 Ways Your Boss Kills Employee Motivation
 
The Great State of Design with CSS Grid Layout and Friends
The Great State of Design with CSS Grid Layout and FriendsThe Great State of Design with CSS Grid Layout and Friends
The Great State of Design with CSS Grid Layout and Friends
 

Similar a Jsummit 2014

Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Otávio Santana
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemPetronio Candido
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptxssuser980608
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machineBruno Coan
 
TDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTTDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTLoiane Groner
 
Jud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantinJud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantinserjaumfantin
 
Introdução ao Python & Web Services
Introdução ao Python & Web ServicesIntrodução ao Python & Web Services
Introdução ao Python & Web ServicesDorneles Treméa
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalEduardo Bregaida
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visagejesuinoPower
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Gabriel Machado
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformMilfont Consulting
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panosLaís Lima
 

Similar a Jsummit 2014 (20)

Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]Imergindo jvm[Apresentação ]
Imergindo jvm[Apresentação ]
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
 
Java Virtual Threads.pptx
Java Virtual Threads.pptxJava Virtual Threads.pptx
Java Virtual Threads.pptx
 
Introdução Java virtual machine
Introdução Java virtual machineIntrodução Java virtual machine
Introdução Java virtual machine
 
Replicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManagerReplicação PostgreSQL com RepManager
Replicação PostgreSQL com RepManager
 
ANTLR & ANTTLRWorks
ANTLR & ANTTLRWorksANTLR & ANTTLRWorks
ANTLR & ANTTLRWorks
 
TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
TDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWTTDC2012: Apps RIA com Sencha GXT 3 e GWT
TDC2012: Apps RIA com Sencha GXT 3 e GWT
 
Jud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantinJud con presentation_brazil_sergio-fantin
Jud con presentation_brazil_sergio-fantin
 
Introdução ao Python & Web Services
Introdução ao Python & Web ServicesIntrodução ao Python & Web Services
Introdução ao Python & Web Services
 
Java+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso TotalJava+DDD+BDD+TDD=Sucesso Total
Java+DDD+BDD+TDD=Sucesso Total
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
Logs, pra que te quero! @ PHP Community Summit by locaweb 2017
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Manual
ManualManual
Manual
 
Conhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java PlatformConhecendo a JSR 223: Scripting for the Java Platform
Conhecendo a JSR 223: Scripting for the Java Platform
 
Java 01
Java 01Java 01
Java 01
 
Aula1
Aula1Aula1
Aula1
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 

Más de Otávio Santana

NoSQL design pitfalls with Java
NoSQL design pitfalls with JavaNoSQL design pitfalls with Java
NoSQL design pitfalls with JavaOtávio Santana
 
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.Otávio Santana
 
Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]Otávio Santana
 
Arquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com JavaArquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com JavaOtávio Santana
 
Build, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to endBuild, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to endOtávio Santana
 
Jakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the CloudJakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the CloudOtávio Santana
 
ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?Otávio Santana
 
Jakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud AgeJakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud AgeOtávio Santana
 
Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0Otávio Santana
 
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]Otávio Santana
 
Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]Otávio Santana
 
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]Otávio Santana
 
The new generation of data persistence with graph
The new generation of data persistence with graphThe new generation of data persistence with graph
The new generation of data persistence with graphOtávio Santana
 
Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11Otávio Santana
 
Stateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - GuatemalaStateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - GuatemalaOtávio Santana
 
Stateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - MexicoStateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - MexicoOtávio Santana
 
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabaseEclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabaseOtávio Santana
 
Management 3.0 and open source
Management 3.0 and open sourceManagement 3.0 and open source
Management 3.0 and open sourceOtávio Santana
 
Building a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EEBuilding a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EEOtávio Santana
 

Más de Otávio Santana (20)

NoSQL design pitfalls with Java
NoSQL design pitfalls with JavaNoSQL design pitfalls with Java
NoSQL design pitfalls with Java
 
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
Modern Cloud-Native Jakarta EE Frameworks: tips, challenges, and trends.
 
Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]Architecting Cloud Computing Solutions with Java [1.1]
Architecting Cloud Computing Solutions with Java [1.1]
 
Arquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com JavaArquitetando soluções de computação em nuvem com Java
Arquitetando soluções de computação em nuvem com Java
 
Build, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to endBuild, run, and scale your Java applications end to end
Build, run, and scale your Java applications end to end
 
Jakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the CloudJakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
Jakarta NoSQL: Meet the first Jakarta EE specification in the Cloud
 
ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?ORMs: Heroes or Villains Inside the Architecture?
ORMs: Heroes or Villains Inside the Architecture?
 
Jakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud AgeJakarta EE Meets NoSQL at the Cloud Age
Jakarta EE Meets NoSQL at the Cloud Age
 
Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0Boost your APIs with GraphQL 1.0
Boost your APIs with GraphQL 1.0
 
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
 
Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]Let’s Make Graph Databases Fun Again with Java [DEV6043]
Let’s Make Graph Databases Fun Again with Java [DEV6043]
 
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
 
The new generation of data persistence with graph
The new generation of data persistence with graphThe new generation of data persistence with graph
The new generation of data persistence with graph
 
Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11Eclipse JNoSQL updates from JCP September 11
Eclipse JNoSQL updates from JCP September 11
 
Stateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - GuatemalaStateless Microservice Security via JWT and MicroProfile - Guatemala
Stateless Microservice Security via JWT and MicroProfile - Guatemala
 
Stateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - MexicoStateless Microservice Security via JWT and MicroProfile - Mexico
Stateless Microservice Security via JWT and MicroProfile - Mexico
 
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL DatabaseEclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
 
Polyglot persistence
Polyglot persistencePolyglot persistence
Polyglot persistence
 
Management 3.0 and open source
Management 3.0 and open sourceManagement 3.0 and open source
Management 3.0 and open source
 
Building a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EEBuilding a Recommendation Engine with Java EE
Building a Recommendation Engine with Java EE
 

Jsummit 2014

  • 1. JVM Internal Otávio Santana @otaviojava
  • 2. Comunidades ● @javabahia ● @soujava ● @java ● @soujavalivre
  • 3. Sumário ● Falar da linguagem Java ● Histórico das versões ● Linguagens da JVM ● Tipo de valores para a JVM ● Registradores ● Bytecodes
  • 4. Java ➢ Uma das linguagens mais usadas no mundo ➢ Uma comunidade muito forte ➢ Recolhe memória de modo automático ➢ Multi-plataforma ➢ Linguagem ➢ Plataforma ➢ Máquina virtual
  • 5. Funcionamento Externo ● JCP (Java Community Process) ● JSR(Java Specification Requests) ● JEP (JDK Enhancement Proposals) JEP 174: Nashorn JavaScript Engine JEP 156: G1 GC: Reduce need for full GCs ● JSR 336 = Java 7 1) JSR 203 : ("NIO.2") 2) JSR 292 : Invoke Dynamic 3) JSR 334 :COIN
  • 6. OpenJDK hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk_1_9 sh ./get_source.sh ./configure make install
  • 7. Empresas AMD Apple Azul Systems, Inc. Canonical Google IBM Intel Oracle RedHat SAP Software Company Stratus Twitter
  • 8. Histórico da Plataforma ● Em 1995 foram lançadas betas do Java ● 1.0 em janeiro de 1996 foi a primeira versão estável ● Na 1.1 lançada em fevereiro de 1997 ● Grande melhorias no evento do AWT ● Inner classes, JavaBeans, JDBC , RMI ● Reflection
  • 9. Histórico da Plataforma ● No Java 1.2 de dezembro de 1998 Kestrel ● palavra-chave strictfp, Swing, JIT, Java Plug-in ● Java IDL,Collections framework ● No java 1.3 em maio de 2000 ● JavaSound, Java Naming and Directory Interface (JNDI) Java Platform Debugger Architecture (ACDP)
  • 10. Histórico da Plataforma Merlin ● No Java 1.4 fevereiro de 2002 ● Primeira com o JCP, NIO, XML, JDBC 3.0, API de Loggin, assert, expressões regulares ● No java 1.5 setembro de 2004 ● Generics, Autoboxing/Unboxing, Varargs, Annotations
  • 11. Histórico da Plataforma ● No Java 1.6 dezembro de 2006 ● JDBC 4.0, Rhino, Java Compiler API, API WebServices ● No Java 1.7 julho de 2011 ● NIO2, OpenJDK referência, Diamond, Coin
  • 12. Histórico da Plataforma ● No Java 1.8 dezembro de 2006 ● Lambda, Stream, Nashorn ● No Java 1.9 julho de 2016 ● Cloud, MoneyAPI, Sumatra, JavaFX
  • 13. Linguagem, Plataforma, JVM ● Linguagem: if, do, while,Object, herança ● JSE ( NIO, Collections) ● JVM (Multiplataforma, GC)
  • 14. Java Program JVM JJVVMM JJVVMM JJVVMM JJVVMM
  • 15.
  • 16. JVM Java C/C++ XML Outras
  • 17. JVM 4 3.5 3 2.5 2 1.5 1 0.5 0 2008 2009 2010 2011 2012 2013 2014 Java C/C++ Outras
  • 18. JVM HH OOT T SS PP OOT T J R OCKI T OPE NJ DK
  • 19. JVM
  • 20. Tipos Primitivos Referência numéricos booleano returnAdress flutuante inteiro float double byte short chart int long classe interface Array
  • 21. Primitivos Nome Size variação default Tipo byte 8 -2⁷ até 2⁷ 0 inteiro short 16 -2¹⁵ até 2¹⁵ 0 inteiro integer 32 -2³² até 2³¹ 0 inteiro long 64 -2⁶³ até 2⁶³ 0 inteiro char 16 UFT-8 'u0000' inteiro Float 32 0 flutuante Double 64 byte 0 flutuante boolean int false booleano returnAddress nulo ponteiro
  • 22. Registradores Pilhas Nativas PPCC c coouunnteterr HHeeaapp MMeeththoodd A Arreeaa PPilihlhaa J Jaavvaa Pilhas ● Heap: instâncias ● Method Area: classes ● Pilha Java: métodos java ● Pilha navita: pilhas nativas ● PC Counter: execução Nativas
  • 23. Registradores em Thread hheeaapp Thread 1 PC Counter Pilha Java Pilha Nativa Thread 2 PC Counter Pilha Java Pilha Nativa Thread 3 OObbjejetoto OObbjejetoto PC Counter Pilha Java Pilha Nativa MMeeththoodd A Arreeaa OObbjejetoto OObbjejetoto OObbjejetoto OObbjejetoto OObbjejetoto OObbjejetoto cclalassss cclalassss cclalassss cclalassss
  • 24. PC e Pilha Navita ● PC ● Pilha Nativa Pilhas Nativas Pilhas Nativas ?? ?? ?? ?? PPCC rreetuturrnnAAddrreessss ? ? ? ? ?
  • 25. Pilhas Java ● Definida no tempo de compilação ● Unidade 32 bits ● Byte, short, chart para int Frame Data PPilihlhaass JJaavvaa Frame Pilha De Operações Pilha De Variáveis Frame Pilha De Operações Frame Data Pilha De Variáveis
  • 26. Operação e variável referência int PPilihlhaa d dee v vaarriáiávveeisis double ● public int doInscante(int a, double b); ● public static int doClass(int a, double b); int PPilihlhaa d dee v vaarriáiávveeisis double
  • 27. 10 PPilihlhaa d dee o oppeerraaççõõeess 10 20 ● public int doInscante(int a, int b); ● DoInstance(10,20); PPilihlhaa d dee o oppeerraaççõõeess 30 PPilihlhaa d dee o oppeerraaççõõeess Operação e variável
  • 28. Operação e variável 10 10.10 PPilihlhaa d dee o oppeerraaççõõeess PPilihlhaa d dee o oppeerraaççõõeess ● public double doInscante(double a, double b); ● DoInstance(10.10d,20.20); 10.10 20.20 30.30 PPilihlhaa d dee o oppeerraaççõõeess
  • 29. MethodArea ● O qualified da classe ● O qualified da classe pai ● Informação se é uma classe ou interface ● Os modificadores ● A lista com os qualifieds das interfaces ● Constant Pool (informações dos métodos, atributos, referência da classe, referência da ClassLoader)
  • 30. Code Cache ● Código Compilado pelo JIT ● Just In TIME (Deixa o código mais rápido em tempo de execução o tranformando em nativo) ● Junto com o Heap
  • 31. Estrutura de uma classe ● Magic: #CAFEBABE ● Menor e maior
  • 32. Estrutura de uma Classe ➢ JDK 1.0 -> major version 45 e minor version 3 ➢ JDK 1.1 -> major version 45 e minor version 3 ➢ JDK 1.2 -> major version 46 e minor version 0 ➢ JDK 1.3 -> major version 47 e minor version 0 ➢ JDK 1.4 -> major version 48 e minor version 0 ➢ JDK 1.5 -> major version 49 e minor version 0 ➢ JDK 1.6 -> major version 50 e minor version 0 ➢ JDK 1.7 -> major version 51 e minor version 0 ➢ JDK 1.8 -> major version 52 e minor version 0 ➢ JDK 1.9 -> major version 52 e minor version 0
  • 33. Estrutura de uma Classe ● ACC_PUBLIC - flag método, atributo públicos ● ACC_PRIVATE - flag para para privados ● ACC_PROTECTED - protected ● ACC_STATIC - stático ● ACC_FINAL - final ● ACC_SYNCHRONIZED - indica um método sincronizado ● ACC_BRIDGE - indica que o método foi gerado pelo compilador ● ACC_VARARGS - indica que é varags ● ACC_NATIVE - nativo ● ACC_ABSTRACT - abstrato ● ACC_STRICT - indica que o método é strict ● ACC_SYNTHETIC - indica que o método não é “original”
  • 34. Constant Pool ●Métodos ●Atributos ●Índice e um vetor B byte signed byte C char D double F float I int J long L Classname ; referência S short Z boolean [ referência de um vetor [[ referência de uma matriz double dobro(double d) =(D)D Double dobro(Double d) =(Ljava/lang/Double;)Ljava/lang/Double void processar(Object o)(Ljava/lang/Object;)V Int somar(int a, float f);=(IF)I
  • 35. Byte Codes ✔ i para inteiro ✔ l para long ✔ s para short ✔ b para byte ✔ c para char ✔ f para float ✔ d para double ✔ a para referência ●Byte ação ou operação ●Tipos específicos ●Byte, short, chart para int
  • 36. Byte Codes ✔ adicionar: iadd, ladd, fadd, dadd. ✔ subtrair: isub, lsub, fsub, dsub. ✔ multiplicar: imul, lmul, fmul, dmul. ✔ divisão: idiv, ldiv, fdiv, ddiv. ✔ resto: irem, lrem, frem, drem. ✔ negação: ineg, lneg, fneg, dneg. ✔ deslocar: ishl, sidh, iushr, lshl, lshr, lushr. ✔ bit a bit 'or': ior, lor. ✔ bit a bit 'and': iand, a terra. ✔ bit a bit ou exclusivo: ixor, lxor. ✔ Variável local incremente: iinc. ✔ Comparação: dcmpg, dcmpl, fcmpg, fcmpl, lcmp. ✔ Conversão(promoção): i2l, i2f, i2d, l2f, l2d, e f2d ✔ Conversão (encurtar): i2b, i2c, i2s, l2i, f2i, f2l, d2i,d2l, e d2f
  • 37. Byte Codes ✔ invokevirtual - chama um método de uma instância ✔ invokeinterface -chama um método de uma interface ✔ invokespecial -chamada de um método privado ou da super classe ✔ invokestatic -realiza a chamada de um método estático ✔ invokedynamic - método que constrói um objeto ✔ ireturn,lreturn, freturn, dreturn e areturn - retorno ✔ athrow -exceção ✔ monitorenter e monitorexit - sincronizados
  • 38. Demos
  • 39. Heap Referência ●Instâncias ●Gerenciamento de memória ●Pool de objetos ●Informações da classe ●representação do array=n*[referência hheeaapp Objeto ObjetoPool referência methodArea Pool de Objetos
  • 40. Heap Classe Tamanho Referência ● Instâncias ● Gerenciamento de memória ● Pool de objetos ● Informações da classe ● representação do array=n*[referência Classe Tamanho Referência Classe Tamanho Referência Referência
  • 41. Criar Objetos ✔ Carregar o arquivo para a JVM ✔ Implementa a interface java.lang.Class ✔ ClassLoader: boot-strap, não-definido ✔ Linkar: verificar código de segurança, estrutura ✔ Chamar o método construtor Linkar Objeto Classe.class ClassLoader Class methodArea JVM Carregar
  • 42. Class Loarder Bootstrap Class Loader Extension Class Loader System Class Loader Usuário Class Loaders Usuário Class Loaders ✔ Bootstrap- linguagem (código confiável) ✔ Extension – plataforma ✔ System – da aplicação ✔ Usuario – a gosto do freguês (servidores) Usuário Class Loaders Usuário Class Loaders
  • 43. Java 9 ● Build: 34 ● https://jdk9.java.net/download/ ● Java 8 rápido
  • 44. Java 9 Reflections wrappers Regex Security Core 250 200 150 100 50 0 Java 8 - Process Java 9 -Process Java 8 - Memory Java 9 -Memory
  • 45. Shenandoah ● Gerenciar um número maior de memória ● 100GG ● 8 cores
  • 46. Melhorias no GC 8 1 5 2 20 10 5 12 4 10 2 ● Remove combinações depreciadas ● Strings Deduplication ● Segmented Code Cache ● Shenandoah 8 1 1 5 2 20 10 5 4 12 10 4 2
  • 47. Strings duplication 75 25 Heap Another objects String ● 25% do Heap é Strings ● 13.5% String duplicadas String inside Heap 85 15 String Strings duplicates
  • 48. Segmented Code Cache ● JVM internal (non-method) code ● Profiled-code ● Non-profiled code
  • 49. Novidades ● Escrita/leitura leva para JSON ● Generics para primitives ● builders para Collections ● Literal para Collections ● Process API Updates ● Smart Java Compilation ● http 2.0 cliente
  • 50. Novidades ● List<String> list = List.of(a, b, c); ● Set<String> set = Set.of(d, e, f, g); ● Map<String,String> map = Map.of(k1, V1);//not collection ● List<Integer> list = #[ 1, 2, 3 ];
  • 51. Money Api ● Cuida do dinehiro ● Formata ● Arredondamento ● Cotações
  • 52. Measurement API ● Unidade de medida ● Padroniza ● Formata ● Operações (convert, add, subtract)
  • 53. Thank you Otávio Santana @otaviojava