Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Quem tem medo do Java?

Ana Neri
October 17, 2019

Quem tem medo do Java?

Ana Neri

October 17, 2019
Tweet

More Decks by Ana Neri

Other Decks in Technology

Transcript

  1. JVM vs GraalVM Entenda o funcionamento e o que há

    de melhor dessas Virtual Machines @anabneri
  2. Agenda: Processos de Compilamento O que a JVM faz... Arquitetura

    JVM Memória Compiladores WTF is GraalVM? Exemplos Compatibilidade JVM ou GraalVM?
  3. Hello ( ); Engenheira de Software no Itaú Co-Organizadora da

    @unicorn.tech Graduanda em ADS pela BandTec Digital School Meu blog: https://anabneri.github.io/ @anabneri linkedln.com/in/anabeatrizdev/
  4. Mas o que exatamente essas memórias significam? Grupo Heap e

    Stack (non-heap) Heap = Lugar onde os objetos com semântica e referência são armazenados, e é referenciado pelo Garbage Collector Non-Heap = Armazenados objetos curtos e de pouca duração, é uma área de tamanho fixo semelhante a uma pilha.
  5. public class Main { public static int MEGA = 1024

    * 1024; public static String FORMAT = " (%.2fmb)"; …. }
  6. //o intellij ja traz os imports automaticamente referente a memória

    MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean(); out.println(":::::Memória heap:::::"); out.println(); MemoryUsage heapMemory = memoryMXBean.getHeapMemoryUsage();
  7. out.println("Tamanho Inicial :: " + heapMemory.getInit() + String.format(Locale.US, FORMAT,(double) heapMemory.getInit()

    / MEGA)); out.println("Tamanho atual :: " + heapMemory.getInit() + String.format(Locale.US, FORMAT, (double) heapMemory.getCommitted() / MEGA)); out.println("Usado :: " +heapMemory.getUsed() + String.format(Locale.US, FORMAT, (double) heapMemory.getUsed() / MEGA)); out.println("Máximo :: " + heapMemory.getMax() + String.format(Locale.US, FORMAT, (double) heapMemory.getMax() / MEGA)); out.println();
  8. for (MemoryPoolMXBean m :list) { out.println("Nome do Pool :: "

    + m.getName()); out.println("Grupo ::" + m.getType()); out.println(); }
  9. MemoryUsage usage = m.getUsage(); out.println("Inicial: " + usage.getInit() + String.format(Locale.US,

    FORMAT, (double) usage.getInit() / MEGA)); out.println("Atual: " +usage.getCommitted() + String.format(Locale.US, FORMAT, (double) usage.getCommitted() / MEGA)); out.println("Usado: " + usage.getUsed() + String.format(Locale.US, FORMAT, (double) usage.getUsed() / MEGA)); out.println("Máximo: " + usage.getMax() + String.format(Locale.US, FORMAT, (double) usage.getMax() / MEGA)); out.println();
  10. if (i % 100000 == 0) { MemoryUsage mu =

    mp.getUsage(); System.out.println("PermGen inicial: " + String.format(FORMAT, (double) mu.getInit() / MEGA) + "commitada: " + String.format(FORMAT, (double) mu.getCommitted() / MEGA) + "utilizada: " + String.format(FORMAT, (double) mu.getUsed() / MEGA) + "Max: " + String.format(FORMAT, (double) mu.getMax() / MEGA)); }
  11. if ( i == 200000){ System.out.println("Retirar a referencia das Strings

    do Pool" ); textos = new ArrayList(); } textos.add(str2);
  12. for (MemoryPoolMXBean m : lista){ if ((m.getType() == MemoryType.NON_HEAP) &&

    m.getName().toUpperCase().indexOf("METASPACE") != -1){ mp = m; break; } } return mp;
  13. Just in time - JIT Revolução da JVM Faz compilação

    em modo dinâmico Verifica quantas vezes o método esta sendo executado A otimização do JIT faz a JVM ser cada vez mais rápida!
  14. HotsPot - JVM Esta dentro da JVM, é como se

    fosse outra VM dentro do java pra otimizar tempo Utiliza 10% do tempo para compilar 90% do código Utiliza 10% do tempo para compilar 90% do código Os dados são obtidos através da executção real do programa
  15. .... var text = 'Hello World!'; const BigInteger = Java.type(

    'java.math.BigInteger'); text += BigInteger.valueOf(2) .pow(100).toString(16); text += Polyglot.eval( 'R', 'runif(100)')[0]; res.send(text); })
  16. É NATIVO $ javac HelloWorld.java $ time java HelloWorld user

    0.070s $ native-image HelloWorld $ time ./helloworld user 0.005s
  17. Por que é importante você saber essa parada toda... >

    Diferencial no mercado e na vida > Profundidade = excelência > Argumentos pra quando alguem diz que Java é ruim
  18. referências https://www.baeldung.com/java-stack-heap https://pt.wikipedia.org/wiki/HotSpot Livro: Mundo Java Efetivo – A casa

    do Código https://blog.mandic.com.br/artigos/java-garbage-collection-m elhores-praticas-tutoriais-e-muito-mais/