每個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】。未經作者許可,禁止轉載。