Slide 1

Slide 1 text

JVM por debaixo dos panos

Slide 2

Slide 2 text

Ana Beatriz Neri Engenheira de Software - Itaú @anabneri /in/anabeatrizdev anabneri.github.io

Slide 3

Slide 3 text

Agenda (); Processos de compilação O que é JVM Arquitetura da JVM Tuning & GC Gerenciamento de memória Java Mission Control Novidades da JVM no Java 14

Slide 4

Slide 4 text

Processo de compilação

Slide 5

Slide 5 text

Processo de compilação C 0101010101 0101010011 0100101010 0101010101 0101010101 0100101010 0101010101 0101010011 0100101010 0101010101 0101010101 0100101010

Slide 6

Slide 6 text

Processo de compilação JavaC JVM JAVA BYTECO DE

Slide 7

Slide 7 text

O que é JVM?

Slide 8

Slide 8 text

O que é JVM? JVM ≠ JDK ≠ JRE JDK (Java Development Kit), e o kit de desenvolvimento do java, que tem responsabilidade de compilar código em .java para bytecode

Slide 9

Slide 9 text

O que é JVM? JVM ≠ JDK ≠ JRE JVM (Java Virtual Machine), máquina virtual do java responsável por executar o arquivo em .byetcode

Slide 10

Slide 10 text

O que é JVM? JVM ≠ JDK ≠ JRE JRE (Java Runtime Environment), ambiente de execução Java, na qual fornece bibliotecas do Java para o JDK compilar seu código e a JVM rodar seu programa

Slide 11

Slide 11 text

O que é JVM? JDK Java Virtual Machine JRE Bibliotecas básicas (API do java) Ferramentas de execução Ferramentas de desenvolvimento Adaptado de: https://dicasdejava.com.br/qual-a-diferenca-entre-jdk-jre-e-jvm/

Slide 12

Slide 12 text

O que é JVM? Isso possibilita que dentro da JVM rode diversas linguagens

Slide 13

Slide 13 text

Arquitetura da JVM

Slide 14

Slide 14 text

Arquitetura da JVM Class loader subsystem Method area Heap Java stacks PC Registers Native Method Stacks Execution engine Native Method Interface Native Methods libraries Runtime data areas Class files

Slide 15

Slide 15 text

Gerenciamento de memória

Slide 16

Slide 16 text

Gerenciamento de memória A JVM tem repartições um pouco diferentes quando se diz respeito à memória

Slide 17

Slide 17 text

Gerenciamento de memória

Slide 18

Slide 18 text

EDEN SO SO1 TENURED PERMANENT Memória Nova (Young Generation) Espaço de sobrevivência Memória Velha

Slide 19

Slide 19 text

EDEN SO SO1 TENURED PERMANENT Memória Nova (Young Generation) Espaço de sobrevivencia Memória Velha Garbage Collector

Slide 20

Slide 20 text

Tunning & GC

Slide 21

Slide 21 text

Tunning & GC Tuning, podemos ter como otimizações que acontecem em diversas áreas da JVM, tudo aquilo que fazemos além de ergonomic, também conhecido como ajustes. Não existe uma definição fixa, pois tudo depende da jvm que se está usando, o cenário e onde está inserido

Slide 22

Slide 22 text

Tunning & GC GC, ou Garbage Collector é o coletor de "lixo" da JVM, coleta os objetos nao referenciados para liberar espaço dentro da memória No garbage colletor temos otimizações e parâmetros que facilitam sua coleta, como:

Slide 23

Slide 23 text

Tunning & GC Opção Descrição -Xmx Limita o tamanho da heap que a JVM pode alocar e executar no IntelliJ. O valor padrão depende da plataforma, se você estiver enfrentando lentidão você pode querer aumentar esse valor, por exemplo, definir ele pra 2048 megabytes, que ficará -Xmx2048m . -Xms Especifica a memória inicial alocada pela JVM para executar o IntelliJ. O valor padrão depende da plataforma que você estiver usando, geralmente é definido para cerca de metade da memória máxima permitida (-Xmx), por exemplo, -Xms1024m . -XX : NewRatio Especifica a razão entre o tamanho da Young Generation e Old Generation. Na maioria dos casos, recomenda-se uma ratio entre 2 e 4. Isso definirá o tamanho da young generation para ser 1/2 a 1/4 da old generation correspondente, o que é até bom quando você muitas vezes está trabalhando num projeto e em apenas um arquivo de cada vez. No entanto, se você esta constantemente abrindo arquivos novos, e alternando entre vários projetos, você pode precisar aumentar a young generation. Neste caso, tente a configuração --XX:NewRaio=1, que tornará a young generation tão grande quanto a Old generation, permitindo que seus objetos criados permaneçam na young generation por mais tempo

Slide 24

Slide 24 text

Tunning & GC Garbage Collector Tunning Aplicação de perfil de software, Ajuste do servidor e JVM, Hardware e SO certos, Código com boas práticas, Utilizar os parâmetros ideais da JVM, -XX: + UseParallelGC se você tiver multiprocessadores

Slide 25

Slide 25 text

Tunning & GC Garbage Collector Tunning DICAS Não esqueça de ajustar a Perm Generation Evite a criação prematura de objetos e também a criação de objetos sem referência, ambos devem estar o mais próximo do seu local de uso

Slide 26

Slide 26 text

Tunning & GC Garbage Collector Tunning DICAS StringBuffer ao invés de String concat Referências suaves para vazamento de memória Configure os parâmetros -Xms e -Xmx com o mesmo valor sempre que possível

Slide 27

Slide 27 text

Java Mission Control

Slide 28

Slide 28 text

Java Mission Control O que é? Java Mission Control ou JMC é uma ferramenta da Oracle, mas especificamente no Oracle OpenJDK desde o Java 7

Slide 29

Slide 29 text

Java Mission Control O que é? JMC tem o propósito de monitorar várias JVMs em tempo de execução, e fazer análise de arquivo de despejo no Java Flight Recorder. Usado muito em grandes empresas.

Slide 30

Slide 30 text

Java Mission Control Beleza, mas o que isso pode trazer de beneficio para minha pequena aplicação? Usar essa ferramenta da Oracle nas suas aplicações, pode fazer usar mais ainda otimizações da JVM, para quando aplicadas em grandes escala não serem impossíveis e desconhecidas

Slide 31

Slide 31 text

Java Mission Control

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Novidades da JVM no Java 14

Slide 34

Slide 34 text

Novidades de JVM no Java 14 Hotspost/ GC O Z Garbage Collector (ZGC) agora está disponível como um recurso experimental no Windows e MacOS. Para ativá-lo, use os sinalizadores da JVM -XX:+UnlockExperimentalVMOptions -XX:+UseZGC.

Slide 35

Slide 35 text

Novidades de JVM no Java 14 Mensagem detalhada em NullPointerExeptions -XX:+ShowCodeDetailsInExceptionMessages Se a opção estiver configurada, ao encontrar um ponteiro nulo, a JVM analisará o programa para determinar qual referência foi null e, em seguida, fornecerá os detalhes como parte de NullPointerException.getMessage().

Slide 36

Slide 36 text

Perguntas ?

Slide 37

Slide 37 text

Referências https://dzone.com/articles/java-performance-tuning https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/about_prof_perftune.html https://www.oracle.com/technetwork/java/javase/14-relnote-issues-5809570.html

Slide 38

Slide 38 text

@anabneri