JavaRush /Blog Java /Random-ES /Nivel 34. Respuestas a las preguntas de la entrevista sob...
lichMax
Nivel 40
Санкт-Петербург

Nivel 34. Respuestas a las preguntas de la entrevista sobre el tema del nivel.

Publicado en el grupo Random-ES
Busqué en el sitio usando mi búsqueda nativa y busqué todo usando Google; no hay respuestas a las preguntas de este nivel. ¿Quizás me perdí algo y todavía están aquí en algún lugar del sitio? Nivel 34. Respuestas a las preguntas de la entrevista sobre el tema del nivel - 1Por si acaso, adjunto las respuestas que escribí yo mismo: Preguntas para la entrevista:
  1. ¿Qué es la recolección de basura?
  2. ¿ Cuándo se llama al método finalize?
  3. ¿ Qué sucede si finalizeocurre una excepción en un método?
  4. Qué ha pasado SoftReference?
  5. Qué ha pasado WeakReference?
  6. Qué ha pasado PhantomReference?
  7. Como funciona WeakHashMap? ¿Dónde se usa?
  8. ¿Por qué es necesario pasar una cola al constructor PhantomReference?
  9. ¿Por qué necesitas un registrador?
  10. ¿Qué configuraciones del registrador conoces?
Mis respuestas:
  1. 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étodo main().

    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.

  2. 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()o Runtime.getRuntime().runFinalization().

  3. Esta excepción será ignorada y el método saldrá.

  4. SoftReferencetraducido 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.

  5. WeakReferencees 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.

  6. 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 уже уничтожен).

  7. WeakHashMap — это HashMap, у которого ключами являются слабые ссылки. Поэтому, если во время ближайшей сборки мусора будет обнаружено, что на un objeto существует только enlace в WeakHashMap, то из WeakHashMap будет удалена вся пара "ключ-significado", связанная с этим un objetoом.

    В связи с этим данная коллекция может быть использована для хранения Cómoой-то дополнительной, не очень важной информации об un objetoе. Также её удобно использоваться для хранения Cómoой-то временной информации (которая нужная только в рамках данной операции).

  8. Эта очередь используется для отслеживания того, что un objeto больше не нужен. Может быть использовано для закрытия ресурсов, открытых данным un objetoом (например, удаление созданных файлов).

  9. Логгер нужен для сохранения информации о поведении программы, а также некоторых её состояниях. Может быть использован для отладки и выявления ошибок в работе программы и сбоев. Также логгер является позволяет разработчику получать обратную связь от своей программы во время её работы. Кроме того, при критических сбоях логгер может оперативно оповещать нужных людей (например, разработчиков, клиентов, менеджеров проектов, службу техподдержки и т.д.) об этих сбоях.

  10. При настройки логгрирования можно указать следующие вещи:

    • место, куда будет писаться информация (файл, консоль, база данных, сеть и т.д.)
    • mensajes Cómoого уровня будут записываться
    • вид записей в логе
    • для файлов можно указать: manera de файлу и каталогу, размер файлов, количество файлов
    • указать для каждого отдельного пакета свой уровень сообщений, которые будут писаться в лог
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION