Dúvidas sobre Coleta de Lixo em java
Sei que muitas perguntas foram feitas sobre a Coleta de Lixo e já passei por elas, mas ainda tenho algumas dúvidas.
Se não podemos forçar a JVM para coleta de lixo, qual é a necessidade deSystem.gc()
? Em que cenário é útil?
Eu sei sobre geração jovem [eden, SO, S1] e geração antiga e como os objetos são movidos da geração jovem para a geração antiga. Quando um Objeto será movido para geração permanente? Por exemplo, eu tenhomycar
objeto que tem referência e não é elegível para coleta de lixo; portanto, quando serámycar
objeto se moverá em geração permanente?
Eu li que variáveis estáticas são armazenadas em geração permanente. Quando eles serão coletados e que tipo de outros objetos serão armazenados em geração permanente? Por que as variáveis estáticas são armazenadas na geração permanente e para que serve a geração permanente?
Eu sei que os objetos são armazenados na memória heap. É verdade que todo aplicativo tem sua própria memória heap?
É verdade que ligarSystem.gc()
reduz o desempenho do aplicativo e retarda nosso aplicativo? Ou sempre que a coleta de lixo é feita pela JVM, reduz o desempenho do aplicativo e pode fazer com que nosso aplicativo funcione lentamente?
Em quais casos a coleta de lixo parcial é realizada e quando é realizada a coleta de lixo principal?