Uma das vantagens mais óbvias da AVA é o seu mecanismo de gerenciamento de memória. Você só precisa simplesmente criar objetos, o mecanismo de recuperação de lixo do Java é responsável por alocar e liberar memória. No entanto, a situação não é tão simples quanto imaginada, porque os vazamentos de memória geralmente ocorrem em aplicativos Java.
Este tutorial demonstra o que é vazamento de memória, por que há vazamento de memória e como impedir o vazamento de memória.
O que é vazamento de memória?
Definição: Se os objetos não forem mais usados em aplicativos, mas porque são citados em outros lugares, a reciclagem de lixo não poderá ser removida (isso faz com que muita memória seja irracional, resultando em transbordamento de memória. Tradução).
Para entender essa definição, precisamos entender o estado do objeto na memória. A figura abaixo mostra aqueles que não são usados, e esses não são citados.
A partir da figura, podemos ver o objeto de referência e o objeto despreparado (intervalo). Nenhum objeto citado pode ser reciclado pelo mecanismo de reciclagem de lixo, e o objeto de referência não pode ser reciclado pelo mecanismo de recuperação de lixo. Obviamente, o alvo não é usado porque não há outros objetos citando. No entanto, nem todos os objetos não são citados. Alguns objetos não utilizados ainda são citados em outros lugares! Esta é a causa do vazamento de memória.
Por que o vazamento de memória ocorre?
Vamos chegar a este exemplo abaixo para ver por que o vazamento de memória ocorre. No exemplo a seguir, o objeto A faz referência ao objeto B. O ciclo de vida de A (T1-T4) é muito mais longo que o ciclo de vida (T2-T3) de B. Quando B não é mais usado no aplicativo, A ainda mantém a referência a B. Dessa forma, o mecanismo de recuperação de lixo não pode remover B da memória. É provável que isso cause reversão da memória, porque se muitos outros objetos forem como A, haverá muitos objetos que não podem ser reciclados na memória, o que consumirá muito espaço de memória.
Também é possível que B mantenha um grande número de referências a outros objetos. Esses objetos mencionados por B não serão reciclados. Todos esses objetos não utilizados consumirão espaço precioso de memória.
Como evitar vazamentos de memória?
A seguir, são apresentadas algumas habilidades rápidas para evitar vazamentos de memória:
1. Preste atenção à classe de coleta, como hashmap, Arraylist, etc., porque eles são onde os vazamentos de memória geralmente ocorrem. Quando são declarados como objetos estáticos, seu ciclo de vida é o tempo que o ciclo de vida da aplicação.
2. Preste atenção ao monitor de incidentes e retorno de chamada. Se uma classe estiver registrada com um ouvinte, mas quando a categoria não for mais usada, o dispositivo de monitoramento pode não ser cancelado e os vazamentos de memória poderão ocorrer.
3. "Se uma classe gerencia sua própria memória, os programadores devem estar alertas ao vazamento de memória".