Um do maiores diferenciais do Java não está na linguagem e sim na JVM. Conheça um pouco mais sobre esse “motor”, seu funcionamento e sua arquitetura para tirar melhor proveito da JVM em suas aplicações.
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
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
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
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