ZGC:可擴展的低延遲JVM垃圾收集器,2021Java春招面試真題詳解

程序員某個人 2021-09-19 21:14:28 阅读数:549

zgc jvm 垃圾 收集器 收集

作者:享學課堂Mark老師

轉載請聲明出處!

1.簡介

今天,應用程序同時為數千甚至數百萬用戶提供服務的情况並不少見。這些應用程序需要大量內存。但是,管理所有內存可能會輕易影響應用程序性能。

為了解决這個問題,Java 11引入了Z垃圾收集器(ZGC)作為實驗性垃圾收集器(GC)實現。

我們來看看ZGC如何設法在幾TB的堆上保持低暫停時間。

2.主要概念

為了理解ZGC,我們需要了解內存管理和垃圾收集器背後的基本概念和術語。

2.1 內存管理

物理內存是我們硬件提供的RAM。

操作系統(OS)為每個應用程序分配虛擬內存空間。

當然,我們將虛擬內存存儲在物理內存中,操作系統負責維護兩者之間的映射。此映射通常涉及硬件加速。

2.2 垃圾收集

當我們創建Java應用程序時,我們不必釋放我們分配的內存,因為垃圾收集器會為我們執行此操作。總之,GC可以通過一系列參考資料從我們的應用程序中獲取哪些對象,從而釋放出我們無法觸及的對象。

為實現這一目標,垃圾收集器有多個階段。

2.3 GC階段的屬性

GC階段可以具有不同的屬性:

  • 並行階段可以在多個GC線程上運行
  • 串行階段在單個線程上運行
  • 停止世界階段不能與應用程序代碼同時運行
  • 並發階段可以在後臺運行,而我們的應用程序可以完成它的工作
  • 增量階段可以在完成所有工作之前終止,並在以後繼續

所有上述技術都有其優點和缺點。例如,假設我們有一個可以與我們的應用程序同時運行的階段。此階段的串行實現需要1%的整體CPU性能並運行1000ms。相比之下,並行實現使用30%的CPU並在50ms內完成其工作。

在此示例中,並行解决方案使用更多的CPU,因為它可能更複雜並且必須同步線程。對於CPU昇沉應用程序(例如批處理作業)來說,這是一個問題,因為我們的計算能力較低,無法進行有效的工作。

當然,這個例子有編號。但是,很明顯所有應用程序都有自己的特性,因此它們具有不同的GC要求。

有關更詳細的描述,請訪問我們關於Java內存管理的文章。

3.ZGC Concepts

除了久經考驗的GC技術之外,ZGC還引入了兩個新概念:指針著色和負載屏障。

3.1 指針著色

指針錶示虛擬內存中字節的比特置。但是,我們不一定要使用指針的所有比特來執行此操作 - 某些比特可以錶示指針的屬性。這就是我們所說的指針著色。

使用32比特,我們可以處理4GB字節。由於現在配置的內存已經遠遠超過了這個數量,我們顯然不能使用32比特。因此,ZGC使用64比特指針, 這意味著ZGC僅適用於64比特平臺:

ZGC:可擴展的低延遲JVM垃圾收集器,2021Java春招面試真題詳解_程序員

ZGC指針使用42比特來錶示地址本身。因此,ZGC指針可以處理4TB的內存空間。

最重要的是,我們有4比特來存儲指針狀態:

  • finalizable bit - 該對象只能通過終結器來訪問

總結

對於面試還是要好好准備的,尤其是有些問題還是很容易挖坑的,例如你為什麼離開現在的公司(你當然不應該抱怨現在的公司有哪些不好的地方,更多的應該錶明自己想要尋找更好的發展機會,自己的一些現實因素,比如對於我而言是現在應聘的公司離自己的家更近,又或者是自己工作到達了迷茫期,想跳出迷茫期等等)

ZGC:可擴展的低延遲JVM垃圾收集器,2021Java春招面試真題詳解_Java_02

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

Java面試精選題、架構實戰文檔

整理不易,覺得有幫助的朋友可以幫忙點贊分享支持一下小編~

你的支持,我的動力;祝各比特前程似錦,offer不斷!

版权声明:本文为[程序員某個人]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210919211428170B.html