JavaRush /Java 博客 /Random-ZH /第 34 级。有关该级别主题的面试问题的答案
lichMax
第 40 级
Санкт-Петербург

第 34 级。有关该级别主题的面试问题的答案

已在 Random-ZH 群组中发布
我使用本机搜索搜索了该网站,并使用 Google 搜索了所有内容 - 此级别的问题没有答案。也许我错过了一些东西,但它们仍然在网站的某个地方!? 第 34 级。关于第 1 级主题的面试问题的答案以防万一,我附上我为自己写的答案: 面试问题:
  1. 什么是垃圾收集?
  2. 该方法什么时候被调用finalize
  3. finalize如果方法中发生异常会怎样?
  4. 发生了什么事SoftReference
  5. 发生了什么事WeakReference
  6. 发生了什么事PhantomReference
  7. 它是如何工作的WeakHashMap?它用在哪里?
  8. 为什么需要将队列传递给构造函数PhantomReference
  9. 为什么需要记录器?
  10. 您知道哪些记录器设置?
我的回答:
  1. 这是一种销毁不必要对象的机制。不需要的对象是未使用的对象。有两种方法可以找到此类对象:引用计数和跟踪。在第一种情况下,每个对象都与一个变量关联,该变量存储对此对象的引用数量。如果该数字降至零,则该对象被视为死亡。在第二种情况下,垃圾收集器从根点到末尾(直到空值)跟踪对象引用,遍历整个树。它无法从根点到达的对象被认为是死的。根点是所有活动线程、main方法、方法的参数main(),以及方法所在类的所有静态变量main()

    确定哪些对象适合销毁只是垃圾收集器工作的第一部分。第二部分实际上是删除它们并使用内存。这里使用了混合方法。所有可用于对象的内存都分为三个区域:年轻对象区域、旧对象区域和永久对象区域(这些是类、元数据、内部字符串等)。第一个区域又分为三个子区域:Eden 和幸存者空间 1 和 2。Eden 存储所有新创建的对象。其余两个区域存储在上次垃圾回收中幸存下来的对象。垃圾收集器按如下方式处理整个区域(年轻对象的区域)。在下一次垃圾收集期间,他在 Eden 区域中找到存活对象,并将它们复制到第二个 Survivor 区域。此后,他还在第一个区域中查找存活对象,并将它们复制到幸存者的第二个区域,或者,如果它们已经足够“老”,则复制到老年代的区域。随后,他清理了伊甸园区域和第一幸存者区域。接下来,他将第二个区域的幸存者视为第一。就这样,该区域的垃圾收集结束了。

    Для второй области сборка мусора идёт несколько по-другому. Там есть одна большая область, она ни на что не делится, но сборщик мусора все живые an objectы в ней во время своей работы перемещает в начало области. Соответственно, вторая часть области будет состоять только из пустого пространства и мёртвых an objectов. После этого сборщик мусора завершает свою работу.

  2. Перед уничтожение an object сборщиком мусора. Также можно вручную запустить вызовы этого метода у всех недостижимых an objectов, для этого надо вызвать метод System.runFinalization() or Runtime.getRuntime().runFinalization().

  3. Это исключение будет проигнорировано, и произойдёт выход из метода.

  4. SoftReference переводится How "мягкая link". Эта link на an object, но более слабая, чем обычная link (StrongReference). Объекты, на которые сущесвуют только мягкие ссылки, называются мягcodeостижимыми. Такие an objectы не уничтожаются в обычном случае. Но если у JVM закочиналась память, то сборщик мусоры удаляет все такие an objectы.

  5. WeakReference — это так называемая слабая link на an object. Она ещё слабее Soft-ссылки. Все an objectы, на которые существуют только слабые ссылки, будут удалены при ближайщей сборке мусора.

  6. PhantomReference — это самая слабая link. Механизм работы с такими link запускается только если на an object нет больше ниHowих других ссылок. Призрачные ссылки используются для сложной proceduresы удаления an object. Это может быть необходимо, если an object делает что за граница Java-машины, например, вызывает низкоуровневые функции ОС or пишет своё состояние в файл, or делает ещё что-то важное и сложное.

    Механизм работы с такими linkми следующий. Если на an object не осталось больше ниHowих других ссылок, и у него переопределён метода finalize(), то этот метода будет вызван во время ближащей сборки мусора. Если же этот метод не переопределён, то этот an object пропускает текущую сборку мусора, и попадает только в следующую. Во время этой (следующей) сборки мусора данный an object помещается в очередь призрачных an objectов, из которой будет удалён, когда у его призрачной ссылки вызовут метод clear(). Также стоит отметить, что метода get() у призрачной link всегда возвращает null (в отличие от двух других несильных ссылок, у которых он возвращает null, только если an object уже уничтожен).

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

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

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

  9. 需要一个记录器来保存有关程序行为及其某些状态的信息。可用于调试和识别程序错误和故障。记录器还允许开发人员在程序运行时接收来自程序的反馈。此外,如果出现严重故障,记录器可以快速将这些故障通知合适的人员(例如,开发人员、客户、项目经理、技术支持等)。

  10. 设置日志记录时,您可以指定以下内容:

    • 将写入信息的位置(文件、控制台、数据库、网络等)
    • 将记录什么级别的消息
    • 日志条目类型
    • 对于文件,您可以指定:文件和目录的路径、文件大小、文件数量
    • 为每个单独的包指定将写入日志的消息级别
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION