Download - Imergindo jvm[Apresentação ]
![Page 1: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/1.jpg)
#Imergindo na JVM
Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/
![Page 2: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/2.jpg)
Comunidades
• @javabahia• @soujava• @java• @soujavalivre
![Page 3: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/3.jpg)
Sumário● Falar da linguagem Java● Histórico das versões ● Linguagens da JVM● Tipo de valores para a JVM● Registradores● Bytecodes● Gargage Collector
![Page 4: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/4.jpg)
➢ 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
![Page 5: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/5.jpg)
Funcionamento externo
• JCP (Java Community Process)• JSR(Java Specification Requests)• JEP (JDK Enhancement Proposals)
• JSR 336 = Java 71) JSR 203 : ("NIO.2")
2) JSR 292 : Invoke Dynamic
3) JSR 334 :COIN
JEP 174: Nashorn JavaScript EngineJEP 156: G1 GC: Reduce need for full GCs
![Page 6: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/6.jpg)
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 AWTInner classes, JavaBeans, JDBC , RMI Reflection
![Page 7: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/7.jpg)
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
![Page 8: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/8.jpg)
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
![Page 9: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/9.jpg)
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
![Page 10: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/10.jpg)
Linguagem, Plataforma, JVM
• Linguagem: if, do, while,Object, herança
• JSE ( NIO, Collections)• JVM (Multiplataforma, GC)
![Page 11: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/11.jpg)
![Page 12: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/12.jpg)
Class.class Stream
Instruções
Execução Nativa
![Page 13: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/13.jpg)
![Page 14: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/14.jpg)
tipos
•
![Page 15: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/15.jpg)
PrimitivosNome Tamanho variação Valor padrão Tipo
byte 8-bit -2⁷ até 2⁷ 0 inteiro
short 16-bits -2¹ até 2¹⁵ ⁵ 0 inteiro
integer 32-bits -2³² até 2³¹ 0 inteiro
long 64-bits -2 ³ até 2 ³⁶ ⁶ 0 inteiro
char 16-bits UFT-8 '\u0000' inteiro
Float 32-bits 0 flutuante
Double 64-bits 0 flutuante
boolean inteiro false booleano
returnAddress nulo ponteiro
![Page 16: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/16.jpg)
Registradores
• Heap: instâncias• Method Area: classes • Pilha Java: métodos java• Pilha navita: pilhas nativas• PC Counter: execução
![Page 17: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/17.jpg)
![Page 18: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/18.jpg)
PC e Pilha Navita
• PC• Pilha Nativa
![Page 19: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/19.jpg)
Pilhas Java
• Definida no tempo de compilação
• Unidade 32 bits• Byte, short, chart para
int
![Page 20: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/20.jpg)
Operação e variável
• public int doInscante(int a, double b);• public static int doClass(int a, double b);
![Page 21: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/21.jpg)
Operação e variável
• public int doInscante(int a, int b);• DoInstance(10,20);
![Page 22: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/22.jpg)
Operação e variável
• public double doInscante(double a, double b);
• DoInstance(10.10d,20.20);
![Page 23: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/23.jpg)
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)
![Page 24: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/24.jpg)
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
![Page 25: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/25.jpg)
Estrutura de uma classe
• Magic: #CAFEBABE• Menor e maior
![Page 26: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/26.jpg)
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
![Page 27: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/27.jpg)
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”
![Page 28: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/28.jpg)
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”
![Page 29: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/29.jpg)
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 shortZ boolean [ referência de um vetor [[ referência de uma matriz
double dobro(double d) =(D)DDouble dobro(Double d) =(Ljava/lang/Double;)Ljava/lang/Doublevoid processar(Object o)(Ljava/lang/Object;)VInt somar(int a, float f);=(IF)I
![Page 30: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/30.jpg)
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
![Page 31: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/31.jpg)
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
![Page 32: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/32.jpg)
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
![Page 33: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/33.jpg)
Demos
![Page 34: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/34.jpg)
Heap
InstânciasGerenciamento de memóriaPool de objetosInformações da classerepresentação do array=n*[referência
![Page 35: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/35.jpg)
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
![Page 36: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/36.jpg)
Class Loarder
✔Bootstrap- linguagem (código confiável)✔Extension – plataforma✔System – da aplicação✔Usuario – a gosto do freguês (servidores)
![Page 37: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/37.jpg)
Garbage Collector
✔Coletor de Lixo✔Mark Sweep✔Alto tempo✔Maior collector
![Page 38: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/38.jpg)
Garbage Collector
✔Objetos não duram✔Alocado logicamente, mas não fisicamente✔Copiados por gerações✔Minor collector
![Page 39: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/39.jpg)
Serial
✔Monocore✔Pequenos dispositivos✔Pequenas aplicações✔Multi-core com pequena memória
![Page 40: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/40.jpg)
Paralelo
✔MultiCore✔Aplicações com Objetos com pouco tempo de Vida
![Page 41: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/41.jpg)
Concorrente
✔MultiCore✔Objetos com Muito tempo de vida✔Minimiza o tempo de pausa✔Menores Pausas com Maior frequência
![Page 42: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/42.jpg)
Concorrente Incremental
Multi-coreObjetos com Muito tempo de vidaSimilar ao anterior Tempo definido no processador
![Page 43: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/43.jpg)
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
![Page 44: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/44.jpg)
OpenJDK
Projeto Open SourceFaça Parte você tambémComece usando
![Page 45: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/45.jpg)
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
![Page 46: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/46.jpg)
JNI
Interface entre o código Java e o NativoLegal para conhecer melhor sobre o
funcionamento( GC, Alocação de memória, IO)Código Legal em outras linguagensComunicar com outras Plataformas
![Page 47: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/47.jpg)
JNITipo 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 HelloWorldgcc -o libHelloWorld.so -shared -I$JAVA_HOME/include
-I$JAVA_HOME/linux HelloWorld.cjava -Djava.library.path=. HelloWorld Otávio 4
![Page 48: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/48.jpg)
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: [email protected] com assunto: lista de discussão openjdk
![Page 49: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/49.jpg)
E-Book
http://www.slideshare.net/otagonsan/imergindo-na-jvm
![Page 50: Imergindo jvm[Apresentação ]](https://reader034.vdocuments.site/reader034/viewer/2022042512/5563a518d8b42a01658b53ed/html5/thumbnails/50.jpg)
#Obrigado
Otávio Santana@otaviojavahttp://www.java.net/blogs/otaviojava/http://otaviosantana.blogspot.com.br/