Java Memory

Aula
Estado
  • Existem dois contextos de memória: stack e heap
  • Como em Java você não deve mexer diretamente com memória referências não são realmente endereços de memória, mas uma identidade lógica

Stack

  • É o contexto de memória de uma thread
  • Onde são armazenadas variáveis locais de métodos
  • Só é capaz de armazenar primitivos e referências a objetos

Heap

  • Área de memória compartilhada entre diferentes métodos e threads
  • Onde são armazenados Classes e Objetos

Passagem de parâmetros

  • O valor passado por parâmetro tem seu valor duplicado na stack
    • Se o valor for uma referência, apenas o endereço da referência será duplicado; a instância sendo manipulada será a mesma; se algum valor dessa referência for alterado, o valor na referência base será também alterado
    • Se for um primitivo, o valor será duplicado; ou seja, alterar o valor passado como parâmetro não interfere com o valor base
notion image

Memory Cleanup

  • Garbage collection não limpa a memória logo de que encontra um Objeto não-referenciado; apenas limpa a memória quando seu programa precisa, evitando gastar tempo do CPU com esse processo quando não necessário
  • Um Objeto se torna um candidato a garbage collection quando não existe nenhuma referência para ele