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

Jsummit 2014

  • 1.
    JVM Internal OtávioSantana @otaviojava
  • 2.
    Comunidades ● @javabahia ● @soujava ● @java ● @soujavalivre
  • 3.
    Sumário ● Falarda linguagem Java ● Histórico das versões ● Linguagens da JVM ● Tipo de valores para a JVM ● Registradores ● Bytecodes
  • 4.
    Java ➢ Umadas 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 clonehttp://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
  • 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.
  • 20.
    Tipos Primitivos Referência numéricos booleano returnAdress flutuante inteiro float double byte short chart int long classe interface Array
  • 21.
    Primitivos Nome Sizevariaçã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 NativasPPCC 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 PilhaNavita ● 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 ddee 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 ● Oqualified 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 umaclasse ● Magic: #CAFEBABE ● Menor e maior
  • 32.
    Estrutura de umaClasse ➢ 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 umaClasse ● 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.
  • 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 BootstrapClass 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 Reflectionswrappers Regex Security Core 250 200 150 100 50 0 Java 8 - Process Java 9 -Process Java 8 - Memory Java 9 -Memory
  • 45.
    Shenandoah ● Gerenciarum 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/leituraleva 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ávioSantana @otaviojava