Capítulo 5. Coleta de lixo avançada
Este trabalho foi traduzido com recurso a IA. Agradecemos o teu feedback e comentários: translation-feedback@oreilly.com
No último capítulo, apresentamos a teoria básica da coleta de lixo do Java e o coletor de produção conceitualmente mais simples (Parallel). A partir desse ponto de partida, avançaremos para apresentar um pouco da teoria dos coletores de lixo modernos do Java. Depois disso, apresentaremos o coletor de lixo padrão (G1) usado pelo HotSpot (e pelo GraalVM).
Em geral, para a maioria das cargas de trabalho, o G1 será suficiente. No entanto, existem vários cenários em que as compensações inevitáveis que o GC representa guiarão a escolha do coletor por parte do engenheiro. Assim, também consideraremos alguns colectores mais raramente vistos. Estes são:
-
Shenandoah
-
Coletor de lixo Z (ZGC)
-
Equilibrado
-
Colectores de HotSpot herdados
Nota que nem todos estes colectores são usados na máquina virtual HotSpot - o coletor Balanced que vamos discutir é um coletor do Eclipse OpenJ9.
Compensações e colectores conectáveis
Um aspeto da plataforma Java que os principiantes nem sempre reconhecem imediatamente é que, embora Java tenha um coletor de lixo, as especificações da linguagem e da VM não dizem como o GC deve ser implementado. De facto, houve implementações Java (por exemplo, Epsilon, que conhecerás mais tarde, e Lego Mindstorms) que não implementaram qualquer tipo de GC!1
No ambiente Oracle/OpenJDK, o subsistema GC é tratado como ...