Una de las ventajas más obvias de AVA es su mecanismo de gestión de memoria. Solo necesita crear objetos, el mecanismo de recuperación de basura de Java es responsable de asignar y liberar la memoria. Sin embargo, la situación no es tan simple como se imagina, porque las filtraciones de memoria a menudo ocurren en las aplicaciones Java.
Este tutorial demuestra qué es una fuga de memoria, por qué hay una fuga de memoria y cómo evitar la fuga de memoria.
¿Qué es la fuga de memoria?
Definición: si los objetos ya no se usan en aplicaciones, pero debido a que se citan en otros lugares, el reciclaje de basura no se puede eliminar (esto hace que mucha memoria sea irrazonable, lo que resulta en el desbordamiento de la memoria. Traducción).
Para comprender esta definición, necesitamos comprender el estado del objeto en la memoria. La siguiente figura muestra a los que no se usan y no se citan.
De la figura, podemos ver el objeto de referencia y el objeto no preparado (rango). El mecanismo de reciclaje de basura no puede reciclar ningún objeto citado, y el objeto de referencia no puede ser reciclado por el mecanismo de recuperación de basura. Por supuesto, el objetivo no se usa porque no hay otros objetos que lo citen. Sin embargo, no todos los objetos no se citan. ¡Algunos objetos no utilizados todavía se citan en otro lugar! Esta es la causa de la fuga de memoria.
¿Por qué ocurre la fuga de memoria?
Vamos a este ejemplo a continuación para ver por qué ocurre la fuga de memoria. En el siguiente ejemplo, el objeto A hace referencia al objeto B. El ciclo de vida de A (T1-T4) es mucho más largo que el ciclo de vida (T2-T3) de B. Cuando B ya no se usa en la aplicación, A todavía mantiene la referencia a B. De esta manera, el mecanismo de recuperación de basura no puede eliminar B de la memoria. Es probable que esto cause derrames de memoria, porque si muchos otros objetos son como A, habrá muchos objetos que no se pueden reciclar en la memoria, lo que consumirá mucho espacio de memoria.
También es posible que B tenga una gran cantidad de referencias a otros objetos. Estos objetos referenciados por B no serán reciclados. Todos estos objetos no utilizados consumirán un espacio de memoria precioso.
¿Cómo evitar fugas de memoria?
Las siguientes son algunas habilidades rápidas para evitar la fuga de memoria:
1. Presta atención a la clase de recolección, como hashmap, arraylist, etc., porque son donde a menudo ocurren fugas de memoria. Cuando se declaran objetos estáticos, su ciclo de vida es tan largo como el ciclo de vida de la aplicación.
2. Presta atención al monitor de incidentes y la devolución de llamada. Si una clase se registra en un oyente, pero cuando la categoría ya no se usa, el dispositivo de monitoreo no puede cancelarse y pueden ocurrir fugas de memoria.
3. "Si una clase administra su propia memoria, los programadores deben estar alerta a la fuga de memoria".