Imergindo jvm[Apresentação ]

483 visualizações

Publicada em

Certamente o Java é atualmente uma das linguagens mais usadas e uma das mais populares no mundo, sendo que os seus maiores diferenciais não estão na linguagem e sim na JVM (Máquina virtual Java). Conheça um pouco mais sobre esse motor, seu funcionamento e sua arquitetura para tirar melhor proveito dela em suas aplicações, além de conhecer um pouco sobre a implementação de referência e open source da JVM, o OpenJDK.

Publicada em: Tecnologia
1 comentário
0 gostaram
Estatísticas
Notas
  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
483
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
16
Comentários
1
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Imergindo jvm[Apresentação ]

  1. 1. #Imergindo na JVM Otávio Santana @otaviojava http://www.java.net/blogs/otaviojava/ http://otaviosantana.blogspot.com.br/
  2. 2. Comunidades • @javabahia • @soujava • @java • @soujavalivre
  3. 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. 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. 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. 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. 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. 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. 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
  10. 10. Linguagem, Plataforma, JVM • Linguagem: if, do, while,Object, herança • JSE ( NIO, Collections) • JVM (Multiplataforma, GC)
  11. 11. Class.class Stream Instruções Execução Nativa
  12. 12. tipos •
  13. 13. Primitivos Nome 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
  14. 14. Registradores • Heap: instâncias • Method Area: classes • Pilha Java: métodos java • Pilha navita: pilhas nativas • PC Counter: execução
  15. 15. PC e Pilha Navita • PC • Pilha Nativa
  16. 16. Pilhas Java • Definida no tempo de compilação • Unidade 32 bits • Byte, short, chart para int
  17. 17. Operação e variável • public int doInscante(int a, double b); • public static int doClass(int a, double b);
  18. 18. Operação e variável • public int doInscante(int a, int b); • DoInstance(10,20);
  19. 19. Operação e variável • public double doInscante(double a, double b); • DoInstance(10.10d,20.20);
  20. 20. 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)
  21. 21. 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
  22. 22. Estrutura de uma classe • Magic: #CAFEBABE • Menor e maior
  23. 23. 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
  24. 24. 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”
  25. 25. 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”
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. Demos
  31. 31. Heap Instâncias Gerenciamento de memória Pool de objetos Informações da classe representação do array=n*[referência
  32. 32. 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
  33. 33. Class Loarder ✔Bootstrap- linguagem (código confiável) ✔Extension – plataforma ✔System – da aplicação ✔Usuario – a gosto do freguês (servidores)
  34. 34. Garbage Collector ✔Coletor de Lixo ✔Mark Sweep ✔Alto tempo ✔Maior collector
  35. 35. Garbage Collector ✔Objetos não duram ✔Alocado logicamente, mas não fisicamente ✔Copiados por gerações ✔Minor collector
  36. 36. Serial ✔Monocore ✔Pequenos dispositivos ✔Pequenas aplicações ✔Multi-core com pequena memória
  37. 37. Paralelo ✔MultiCore ✔Aplicações com Objetos com pouco tempo de Vida
  38. 38. Concorrente ✔MultiCore ✔Objetos com Muito tempo de vida ✔Minimiza o tempo de pausa ✔Menores Pausas com Maior frequência
  39. 39. Concorrente Incremental Multi-core Objetos com Muito tempo de vida Similar ao anterior Tempo definido no processador
  40. 40. 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
  41. 41. OpenJDK Projeto Open Source Faça Parte você também Comece usando
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. 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
  46. 46. E-Book http://www.slideshare.net/otagonsan/imergindo-na-jvm
  47. 47. #Obrigado Otávio Santana @otaviojava http://www.java.net/blogs/otaviojava/ http://otaviosantana.blogspot.com.br/

×