No he leído un libro sobre Java durante mucho tiempo. Recientemente, leí el lenguaje de programación Java de James Gosling >> y tomé algunas notas de lectura. Esta parte se trata de reciclaje de basura.
1. Reciclaje de basura
Los objetos se crean utilizando NUEVO, pero no hay una operación de eliminación correspondiente para reciclar la memoria ocupada por el objeto. Cuando completamos el uso de un objeto, solo necesitamos detener la referencia a ese objeto:
-> Cambiar la referencia para apuntar a otro objeto
-> apunte la referencia a NULL
-> regresar del método para que las variables locales del método ya no existan
Puntos clave:
-> Cuando no podemos llegar a un objeto desde ningún código ejecutable, el espacio que toma se puede reciclar.
-> Reciclaje de basura significa que nunca tenemos que preocuparnos por las referencias colgantes. Una referencia falsa se refiere a una referencia al espacio de memoria que se ha eliminado. Este problema existe en sistemas donde los programadores pueden controlar directamente cuando se eliminan los objetos.
-> Modelo de recolector de basura: método de contador de referencia (no se puede resolver referencia circular), marcado y barrido.
2. Resumen
Método finalizar
-> Después de que el recolector de basura determine que el objeto no se puede apagar y que el espacio del objeto se reciclará, el recolector de basura llamará a este método.
-> Este método puede borrar todos los recursos no memoria utilizados por el objeto, y solo puede llamarse una vez para cada objeto. Incluso si la ejecución de este método hace que el objeto sea accesible nuevamente e inmediatamente se vuelve inalcanzable nuevamente, el método solo puede llamarse una vez.
El método de finalización -> se puede llamar en cualquier período de tiempo específico, y es posible que nunca se llame (la máquina virtual Java finaliza).
Anular el método finalizar
-> Cuando un objeto se convierte en basura, los otros objetos a los que se refiere también es probable que se conviertan en basura. Es posible que esta basura haya sido terminado antes de llamar al método finalizado que escribimos, por lo que pueden estar en un estado impredecible.
-> Sobrescribir el método Finalize es agregar el método Super.Finalize. Es mejor agregarlo en la oración finalmente. Asegúrese de que también se pueda terminar parte del contenido declarado en su superclase.
Iii. Clases y métodos relacionados para interactuar con los recolectores de basura
Clase: runtime.getRuntime (), sistema
Métodos: GC (), RunFinalization (), Freememory (), TotalMemory (), MaxMemory ()
La clase del sistema admite los métodos static gc () y runFinalization (), que llamará a los métodos correspondientes en el objeto de tiempo de ejecución actual.
IV. Estado de accesibilidad y objetos de referencia
Un objeto solo se puede recolectar basura cuando ninguna referencia lo especifica, pero a veces es posible que deseemos recolectar el objeto como basura cuando todavía hay una referencia seleccionada que apunta al objeto.
El único propósito de un objeto de referencia es mantener una referencia a otro objeto llamado referencia. Por lo general, mantenemos referencias a objetos a través de campos o variables locales, pero ahora podemos mantener referencias directas a objetos de referencia, que envuelve el objeto que realmente necesitamos. El recolector de basura puede determinar si la referencia residual a un objeto se hace referencia al objeto a través de la cara del objeto de referencia, por lo que puede decidir si reciclar el objeto. La fuerza del objeto de referencia determinará el comportamiento del recolector de basura, y las referencias ordinarias son las referencias más poderosas.
Clase de referencia
-> paquete: java.lang.ref
-> Métodos típicos: get (), clear (), enqueue (), isenqueed ()
Fuerza de citación y accesibilidad
-> Los objetos son fuertemente accesibles: referencia ordinaria
-> El objeto es suavemente accesible: Softreference
-> Los objetos son débilmente accesibles: débil referencia
-> Los objetos son prácticamente accesibles (Phantom Accedable): Phantomreference
-> Los objetos no se pueden obtener: no hay enlaces de referencia una vez que el objeto se vuelve débilmente accesible (o una columna débil), se puede terminar. Si el objeto es inalcanzable después de la terminación, se puede reciclar.
La fase de accesibilidad del objeto desencadena al recolector de basura para realizar un comportamiento apropiado en los tipos de objetos de referencia relevantes:
-> Se pueden permitir que los objetos suaves y accesibles sean reciclados por el recolector de basura. De lo que podemos estar seguros es de que todas lasferencias de Softreferencias para los objetos Softreference se borrarán antes de lanzar un error OutOfMemoryError.
-> Los objetos bien accesibles serán reciclados por el recolector de basura.
-> El objeto accesible virtual no es realmente accesible, porque no se puede acceder a su objeto referencial a través de Phantomreference, y su método GET siempre devuelve nulo. Pero la existencia de referencias virtuales puede evitar que los objetos se reciclen antes de borrar explícitamente las referencias virtuales. Las referencias virtuales nos permiten manejar objetos cuyos métodos de finalización se han llamado, lo que hace que sea seguro pensar que están "muertos".