Entendendo a arquitetura de memória da JVM

Otimização de Código em Java

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

O que é a JVM?

  • Ambiente de execução independente de plataforma
  • Converte bytecode (.class) em código de máquina
  • Gerencia memória e garbage collection
  • Compilação Just-In-Time
Otimização de Código em Java

Visão geral da arquitetura de memória da JVM

A arquitetura de memória da JVM

Otimização de Código em Java

Memória de pilha (Stack)

  • Área de memória para execução de métodos e variáveis locais
  • Estrutura LIFO (Last-In-First-Out)
  • Armazena:
    • Variáveis locais
    • Tipos primitivos
    • Informações de chamada de método
  • StackOverflowError se o limite for excedido
Otimização de Código em Java

Memória de heap

  • Armazena todos os objetos e arrays
  • new cria um objeto e o aloca no heap
  • Gerenciada pelo garbage collector
  • Tamanho dinâmico
  • Dividida em gerações
Otimização de Código em Java

Memória em ação

public void processData() {
    int count = 0;                  // Stack

String name = "Java"; // Heap
List<String> items = // Reference on Stack new ArrayList<>(); // Object on Heap
items.add(new String("Item")); // Object on Heap }
Otimização de Código em Java

Padrões de código eficientes em memória

// Ineficiente
List<String> list1 = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
    String s = new String("value"); // 1000 objetos
    list1.add(s);
}

// Melhor
List<String> list2 = new ArrayList<>();
String s = "value";  // Único objeto
for (int i = 0; i < 1000; i++) {
    list2.add(s);
}
Otimização de Código em Java

Resumo

  • A JVM gerencia memória (principalmente) nas áreas stack e heap
  • Stack -> rápida, armazena primitivos e referências
  • Heap -> armazena objetos
Otimização de Código em Java

Vamos praticar!

Otimização de Código em Java

Preparing Video For Download...