JavaRush /Java Blog /Random-TW /第 34 級。有關該級別主題的面試問題的答案
lichMax
等級 40
Санкт-Петербург

第 34 級。有關該級別主題的面試問題的答案

在 Random-TW 群組發布
我使用本機搜尋搜尋了該網站,並使用 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