Jsummit 2014

833 visualizações

Publicada em

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.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
833
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
11
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Jsummit 2014

  1. 1. JVM Internal Otávio Santana @otaviojava
  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
  4. 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. 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. 6. OpenJDK hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk_1_9 sh ./get_source.sh ./configure make install
  7. 7. Empresas AMD Apple Azul Systems, Inc. Canonical Google IBM Intel Oracle RedHat SAP Software Company Stratus Twitter
  8. 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. 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. 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. 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. 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. 13. Linguagem, Plataforma, JVM ● Linguagem: if, do, while,Object, herança ● JSE ( NIO, Collections) ● JVM (Multiplataforma, GC)
  14. 14. Java Program JVM JJVVMM JJVVMM JJVVMM JJVVMM
  15. 15. JVM Java C/C++ XML Outras
  16. 16. 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
  17. 17. JVM HH OOT T SS PP OOT T J R OCKI T OPE NJ DK
  18. 18. JVM
  19. 19. Tipos Primitivos Referência numéricos booleano returnAdress flutuante inteiro float double byte short chart int long classe interface Array
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. PC e Pilha Navita ● PC ● Pilha Nativa Pilhas Nativas Pilhas Nativas ?? ?? ?? ?? PPCC rreetuturrnnAAddrreessss ? ? ? ? ?
  24. 24. 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
  25. 25. 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
  26. 26. 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
  27. 27. 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
  28. 28. 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)
  29. 29. 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
  30. 30. Estrutura de uma classe ● Magic: #CAFEBABE ● Menor e maior
  31. 31. 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
  32. 32. 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”
  33. 33. 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
  34. 34. 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
  35. 35. 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
  36. 36. 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
  37. 37. Demos
  38. 38. 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
  39. 39. 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
  40. 40. 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
  41. 41. 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
  42. 42. Java 9 ● Build: 34 ● https://jdk9.java.net/download/ ● Java 8 rápido
  43. 43. 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
  44. 44. Shenandoah ● Gerenciar um número maior de memória ● 100GG ● 8 cores
  45. 45. 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
  46. 46. Strings duplication 75 25 Heap Another objects String ● 25% do Heap é Strings ● 13.5% String duplicadas String inside Heap 85 15 String Strings duplicates
  47. 47. Segmented Code Cache ● JVM internal (non-method) code ● Profiled-code ● Non-profiled code
  48. 48. 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
  49. 49. 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 ];
  50. 50. Money Api ● Cuida do dinehiro ● Formata ● Arredondamento ● Cotações
  51. 51. Measurement API ● Unidade de medida ● Padroniza ● Formata ● Operações (convert, add, subtract)
  52. 52. Thank you Otávio Santana @otaviojava

×