jvm內存一目瞭然的簡單描述

jvm基本結構

jvm基本結構

jvm內存模型

jvm的內存區域,又成爲jvm的運行時數據區,主要分爲五大塊:方法區、堆、虛擬機棧、本地方法棧、程序計數器
jvm內存模型

jvm內存 - 線程共享部分(方法區,堆)

方法區和堆,看圖即明白

方法區作用:存放字節碼文件轉換成的的類信息
堆:唯一目的就是存放對象實例,幾乎所有的對象、數組都在這裏存放
方法區和堆

  1. jvm在加載Teacher和Student的時候,把Teacher和Student的所有類相關信息全部加載到了方法區,後續在Teacher chen = new Teacher()時,會在堆裏面創建一個陳老師實例。
    簡單概括:方法區存了類的全量信息,堆裏面存的是類的實例或者也可以稱之爲實例的數據

  2. 陳老師的屬性stu,是一個引用,他指向堆中的學生實例(圖中沒有畫出stu實例,自行腦補)。
    引用不只是在棧裏面,堆實例裏面也可以存在引用

  3. 方法區也存在垃圾回收,回收效率很低

jvm內存 - 線程獨佔部分(虛擬機棧、本地方法棧、程序計數器)

虛擬機棧

爲了方便記錄方法調用,幫助實現方法先進後出的一個數據結構。
虛擬機棧
main方法調用show01(),show01()調用show02(),show02()調用show03(),在執行順序上,是從main -> show01 -> show02 ->show03,在方法執行完成的順序上,是show03->02->01->main,虛擬機棧的作用就是不斷的按照執行順序把方法壓棧,然後再從03開始pop。
圖中的每一個方法,都代表一個棧幀

棧幀

棧幀代表的是一個方法的調用
本地變量表:存放了當前調用方法中所有變量
動態鏈接:方法的調用 --> 執行的代碼 --> 代碼存在方法區 --> 動態鏈接指向方法區的代碼
操作數棧:臨時存放區域(本地變量表裏的數據就是從操作數棧裏拿的)
返回地址:指向地址,可以理解爲 等號 int result = show01();

棧幀內部結構

本地方法棧

本地方法棧類似於虛擬機棧,只不過本地方法棧調用的是native方法(c、c++相關API)

程序計數器

在這裏插入圖片描述
如圖,用於記錄線程中的字節碼執行到哪個一個狀態(指令的編號)

畫圖不易,轉載還請註明出處,謝謝
[5]: https://www.cnblogs.com/yuechuan/p/8984262.html/

[參考文章1][5]

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