- ¿Qué es la recolección de basura?
- ¿ Cuándo se llama al método
finalize
? - ¿ Qué sucede si
finalize
ocurre una excepción en un método? - Qué ha pasado
SoftReference
? - Qué ha pasado
WeakReference
? - Qué ha pasado
PhantomReference
? - Como funciona
WeakHashMap
? ¿Dónde se usa? - ¿Por qué es necesario pasar una cola al constructor
PhantomReference
? - ¿Por qué necesitas un registrador?
- ¿Qué configuraciones del registrador conoces?
-
Este es un mecanismo para destruir objetos innecesarios. Los objetos innecesarios son objetos no utilizados. Hay dos formas de encontrar dichos objetos: recuento de referencias y rastreo. En el primer caso, cada objeto está asociado a una variable que almacena el número de referencias a este objeto. Si este número cae a cero, entonces el objeto se considera muerto. En el segundo caso, el recolector de basura sigue las referencias de objetos desde los puntos raíz hasta el final (hasta el valor nulo), atravesando todo el árbol. Los objetos a los que no puede llegar desde los puntos de raíz se consideran muertos. Los puntos raíz son todos los hilos activos, el método principal, los argumentos del método
main()
, así como todas las variables estáticas de la clase en la que se encuentra el métodomain()
.Determinar qué objetos son elegibles para la destrucción es sólo la primera parte del trabajo del recolector de basura. La segunda parte consiste en eliminarlos y trabajar con la memoria. Aquí se utiliza un enfoque híbrido. Toda la memoria disponible para los objetos se divide en tres áreas: el área de objetos jóvenes, el área de objetos antiguos y el área de objetos permanentes (estos son clases, metadatos, cadenas internas, etc.). La primera área se divide en tres subáreas más: Edén y espacios de supervivientes 1 y 2. Edén almacena todos los objetos recién creados. Las dos zonas restantes almacenan objetos que sobreviven a la última recolección de basura. El recolector de basura trabaja con toda esta área (el área de objetos jóvenes) de la siguiente manera. Durante la siguiente recolección de basura, encuentra objetos vivos en el área del Edén y los copia en la segunda área de sobrevivientes. Después de esto, también busca objetos vivos en la primera área y los copia en la segunda área de supervivientes o, si ya son lo suficientemente “viejos”, en el área de la vieja generación. Luego, limpia el área del Edén y el área del primer superviviente. A continuación, considera que la segunda zona de supervivientes es la primera. Y listo, termina la recolección de basura para esta zona.
En la segunda zona, la recogida de basura se realiza de forma ligeramente diferente. Hay un área grande, no está dividida en nada, pero el recolector de basura mueve todos los objetos vivos que contiene al comienzo del área durante su trabajo. En consecuencia, la segunda parte del área estará formada únicamente por espacio vacío y objetos muertos. Después de esto, el recolector de basura completa su trabajo.
-
Antes de que el recolector de basura destruya el objeto. También puede activar manualmente llamadas a este método en todos los objetos inalcanzables llamando al método
System.runFinalization()
oRuntime.getRuntime().runFinalization()
. -
Esta excepción será ignorada y el método saldrá.
-
SoftReference
traducido como "enlace suave". Esta es una referencia a un objeto, pero más débil que una referencia normal (StrongReference). Los objetos a los que sólo existen referencias suaves se denominan accesibles suavemente. Normalmente, estos objetos no se destruyen. Pero si la JVM se queda sin memoria, el recolector de basura elimina todos esos objetos. -
WeakReference
es la llamada referencia de objeto débil. Es incluso más débil que el enlace blando. Todos los objetos a los que sólo existan referencias débiles se eliminarán durante la próxima recolección de basura. -
PhantomReference
— это самая слабая enlace. Механизм работы с такими enlace запускается только если на un objeto нет больше ниCómoих других ссылок. Призрачные ссылки используются для сложной procedimientosы удаления un objetoа. Это может быть необходимо, если un objeto делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС o пишет своё состояние в файл, o делает ещё что-то важное и сложное.Механизм работы с такими enlaceми следующий. Если на un objeto не осталось больше ниCómoих других ссылок, и у него переопределён метода
finalize()
, то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот un objeto пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный un objeto помещается в очередь призрачных un objetoов, из которой будет удалён, когда у его призрачной ссылки вызовут методclear()
. Также стоит отметить, что методаget()
у призрачной enlace всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращаетnull
, только если un objeto уже уничтожен). -
WeakHashMap
— этоHashMap
, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на un objeto существует только enlace вWeakHashMap
, то изWeakHashMap
будет удалена вся пара "ключ-significado", связанная с этим un objetoом.В связи с этим данная коллекция может быть использована для хранения Cómoой-то дополнительной, не очень важной информации об un objetoе. Также её удобно использоваться для хранения Cómoой-то временной информации (которая нужная только в рамках данной операции).
-
Эта очередь используется для отслеживания того, что un objeto больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным un objetoом (например, удаление созданных файлов).
-
Логгер нужен для сохранения информации о поведении программы, а также некоторых её состояниях. Может быть использован для отладки и выявления ошибок в работе программы и сбоев. Также логгер является позволяет разработчику получать обратную связь от своей программы во время её работы. Кроме того, при критических сбоях логгер может оперативно оповещать нужных людей (например, разработчиков, клиентов, менеджеров проектов, службу техподдержки и т.д.) об этих сбоях.
-
При настройки логгрирования можно указать следующие вещи:
- место, куда будет писаться информация (файл, консоль, база данных, сеть и т.д.)
- mensajes Cómoого уровня будут записываться
- вид записей в логе
- для файлов можно указать: manera de файлу и каталогу, размер файлов, количество файлов
- указать для каждого отдельного пакета свой уровень сообщений, которые будут писаться в лог
GO TO FULL VERSION