Este documento fornece uma introdução à Máquina Virtual Java (JVM). Resume os principais tópicos abordados:
1) Uma breve história da linguagem Java e suas versões;
2) Os componentes fundamentais da JVM, incluindo registradores, bytecodes e o coletor de lixo;
3) Como a JVM executa programas Java, realizando tarefas como alocação de memória e gerenciamento de threads.
3. Sumário
● Falar da linguagem Java
● Histórico das versões
● Linguagens da JVM
● Tipo de valores para a JVM
● Registradores
● Bytecodes
● Gargage Collector
4. ➢ 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)
• JSR 336 = Java 7
1) JSR 203 : ("NIO.2")
2) JSR 292 : Invoke Dynamic
3) JSR 334 :COIN
JEP 174: Nashorn JavaScript Engine
JEP 156: G1 GC: Reduce need for full GCs
6. 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
7. Histórico da Plataforma
• No Java 1.2 de dezembro de 1998
• 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)
Kestrel
8. Histórico da Plataforma
• 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
Merlin
9. 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
23. 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)
24. 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
26. 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
27. 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”
28. 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”
29. 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
30. Byte Codes
●
Byte ação ou operação
●
Tipos específicos
●
Byte, short, chart para int
✔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
31. 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
32. 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
35. 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
36. Class Loarder
✔Bootstrap- linguagem (código confiável)
✔Extension – plataforma
✔System – da aplicação
✔Usuario – a gosto do freguês (servidores)
43. G1
✔MultiCore
✔Grande Volume de Memória
✔Calculo de Objetos vivos
✔Cópia para o espaço em Branco
✔O que ficou é espaço Vazio
✔Prioriza espaço com menor Objetos vivos
45. OpenJDK
. (root) configurações comuns para compilar a OpenJDK
hotspot o código fonte para construir o OpenJDK (baseado no fonte do hotspot) Nesse projeto é encontrado as implementações
do GC
langtools o código fonte para o compilador e utilitários para a linguagem
jdk o código fonte da plataforma JSE, por exemplo, java.lang.String, java.lang.Object, etc.
jaxp o projeto JAXP
jaxws o projeto JAX-WS
corba o projeto Corba
nashorn o projeto nashorn
Código Específico para o SO
Códigos comuns ficam em Share
46. JNI
Interface entre o código Java e o Nativo
Legal para conhecer melhor sobre o
funcionamento( GC, Alocação de memória, IO)
Código Legal em outras linguagens
Comunicar com outras Plataformas
47. JNI
Tipo em Java Tipo Nativo
boolean jboolean
byte jbyte
char jchar
double jdouble
float jfloat
int jint
long jlong
short jshort
void void
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/
javac HelloWorld.java
javah -jni HelloWorld
gcc -o libHelloWorld.so -shared -I$JAVA_HOME/include
-I$JAVA_HOME/linux HelloWorld.c
java -Djava.library.path=. HelloWorld Otávio 4
48. SouJavaLivre
• Blog:http://soujavalivre.blogspot.com.br/
• Twitter: @soujavalivre
• Página no facebook: soujavalivre
• Lista de discussão:
• http://java.net/projects/javali/lists/openjdk
• Envie um e-mail
para: sympa@javali.java.net com assunto:
lista de discussão openjdk