『JavaSE』初識JVM內存區域劃分

JVM 的內存被劃分成了幾個區域, 如圖所示:
在這裏插入圖片描述
程序計數器 (PC Register): 只是一個很小的空間, 保存下一條執行的指令的地址.

虛擬機棧(JVM Stack): 重點是存儲局部變量表(當然也有其他信息). 我們剛纔創建的 int[] arr 這樣的存儲地址的引用就是在這裏保存.

本地方法棧(Native Method Stack): 本地方法棧與虛擬機棧的作用類似. 只不過保存的內容是Native方法的局部變量. 在有些版本的 JVM 實現中(例如HotSpot), 本地方法棧和虛擬機棧是一起的.

堆(Heap): JVM所管理的最大內存區域. 使用 new 創建的對象都是在堆上保存 (例如前面的 new int[]{1, 2,3} )

方法區(Method Area): 用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據.方法編譯出的的字節碼就是保存在這個區域.

運行時常量池(Runtime Constant Pool): 是方法區的一部分, 存放字面量與符號引用.

在這裏插入圖片描述

堆的空間非常大, 棧的空間比較小.
局部變量和引用保存在棧上, new 出的對象保存在堆上.
堆是整個 JVM 共享一個, 而棧每個線程具有一份(一個 Java 程序中可能存在多個棧)

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