java虚拟机内存空间
jdk1.8之前? ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
jdk1.8之后↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
線程私有的:
- 程序計數器
- 虛擬機棧
- 本地方法棧
線程共享的:
- 堆
- 方法區
- 直接內存(非運行時數據區的一部分)
程序計數器
Java 虛擬機棧
描述的是 Java 方法執行的內存模型,每次方法調用的數據都是通過棧傳遞的。實際上,Java虛擬機棧是由一個個棧幀組成,而每個棧幀中都擁有:局部變量表、操作數棧、動態鏈接、方法出口信息。局部變量表主要存放了編譯器可知的各種數據類型(boolean、byte、char、short、int、float、long、double)、對象引用.
 ?
本地方法棧?
本地方法被執行的時候,在本地方法棧也會創建一個棧幀,用于存放該本地方法的局部變量表、操作數棧、動態鏈接、出口信息。
堆
此內存區域的唯一目的就是存放對象實例,幾乎所有的對象實例以及數組都在這里分配內存。
Java 堆是垃圾收集器管理的主要區域,因此也被稱作GC堆(Garbage Collected Heap).從垃圾回收的角度,由于現在收集器基本都采用分代垃圾收集算法,所以Java堆還可以細分為:新生代和老年代:再細致一點有:Eden空間、From Survivor、To Survivor空間等。進一步劃分的目的是更好地回收內存,或者更快地分配內存。
方法區
方法區與 Java 堆一樣,是各個線程共享的內存區域,它用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。雖然Java虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做?Non-Heap(非堆),目的應該是與 Java 堆區分開來。
運行時常量池
運行時常量池是方法區的一部分。Class 文件中除了有類的版本、字段、方法、接口等描述信息外,還有常量池信息(用于存放編譯期生成的各種字面量和符號引用)
JDK1.7及之后版本的 JVM 已經將運行時常量池從方法區中移了出來,在 Java 堆(Heap)中開辟了一塊區域存放運行時常量池。
?
?
總結
以上是生活随笔為你收集整理的java虚拟机内存空间的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: sringboot security基本
- 下一篇: Spring中BeanPostProce
