Memoria Java
Java
Gerência de
Memória em Java
Parte I: Arquitetura da JVM e algoritmos de coleta de lixo
Helder da Rocha
Setembro 2005
1
Por que gerenciar memória?
• Há linguagens em que a alocação de memória é trivial, e não requerem gerenciamento complexo
• Estratégias de alocação de memória
– Estática: áreas de memória são alocadas antes do início do programa; não permite mudanças nas estruturas de dados em tempo de execução (ex: Fortran)
– Linear: memória alocada em fila ou em pilha; não permite remoção de objetos fora da ordem de criação (ex: Forth)
– Dinâmica: permite liberdade de criação e remoção em ordem arbitrária; requer gerência complexa do espaço ocupado e identificação dos espaços livres (ex: Java, C++)
• Java utiliza alocação dinâmica (heap) para objetos e alocação linear (pilha) para procedimentos seqüenciais
– Mas todo o gerenciamento é feito automaticamente
2
Gerencia de memória? Em Java?
• Então, por que se preocupar com memória em Java?
– Diferentemente de C ou C++, programadores Java não têm a responsabilidade e nem a possibilidade de gerenciar a memória do sistema explicitamente
– Programação em alto-nível: alocação e liberação de memória dinâmica é realizada automaticamente usando algoritmos: programador preocupa-se apenas com a lógica do programa
• Mas algoritmos são configurados para situações típicas
– Determinadas aplicações podem requerer ajustes (tuning): performance, escalabilidade, segurança, throughput vs. liveness
– Saber o quanto, quando, onde ajustar requer conhecimentos elementares da organização da memória e dos algoritmos de coleta de lixo empregados pela implementação da JVM usada
3
Assuntos abordados
• Este minicurso explora detalhes sobre o uso de memória virtual em aplicações Java
• Está dividido em três partes
– Parte I: este módulo (arquitetura da JVM, alocação de memória e algoritmos de coleta de lixo)
– Parte II: arquitetura da