十個問題弄清JVM&GC(二)

每個java開發同學不管是日常工作中還是面試裏,都會遇到JDK、JVM和GC的問題。本文會從以下10個問題爲切入點,帶着大家一起全面瞭解一下JVM的方方面面。

  • JVM、JRE和JDK的區別和聯繫
  • JVM是什麼?以及它的主要作用
  • JVM的核心功能有哪些
  • 類加載機制和過程
  • 運行時數據區的邏輯結構
  • JVM的內存模型
  • 如何確定對象是垃圾
  • 垃圾收集的算法有哪些
  • 各種問世的垃圾收集器
  • JVM調優的參數配置

上一篇文章結尾時我們談到,就JVM的設計規範,從使用用途角度JVM的內存大體的分爲:線程私有內存區 和 線程共享內存區。

線程私有內存區在類加載器編譯某個class文件時就確定了執行時需要的“程序計數器”和“虛擬棧幀”等所需的空間,並且會伴隨着當前執行線程的產生而產生,執行線程的消亡而消亡,因此“線程私有內存區”並不需要考慮內存管理和垃圾回收的問題。線程共享內存區在虛擬機啓動時創建,被所有線程共享,是Java虛擬機所管理內存中最應該關注的和最大的一塊。首先我們來一起看一下“線程共享內存區”的內存模型是什麼樣的?

6、JVM的內存模型

如圖所示,JVM的內存結構分爲堆和非堆兩大塊區域。

  • 其中“非堆”就是上篇文章我們提到的方法區或叫元數據區,用來存儲class類信息的。
  • 而“堆”是用來存儲JVM各線程執行期間所創建的實例對象或數組的。堆區分爲兩大塊,一個是Old區,一個是Young區。Young區分爲兩大塊,一個是Survivor區(S0+S1),一塊是Eden區S0和S1一樣大,也可以叫From和To。

原文鏈接:【https://www.infoq.cn/article/KJU2k2GclEdXqxIkFFfh】。未經作者許可,禁止轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章