JVM实战与原理---内存区域分配
JVM實戰與原理
目錄
內存區域分配
1. 程序計數器
2. Java虛擬機棧
3. 本地方法棧
4. 堆
5. 方法區
6. 運行時常量池
內存區域分配
章節目的:明白虛擬機中的內存是如何劃分?每塊區域的作用是什么?
引言:在類加載過程中,會在內存開辟一段空間,這塊內存區域會被劃分為若干個不同功能的區域。
那么我們為什么需要學習JVM中的內存區域分配呢?答案:當我們的程序出現內存泄漏或溢出方面的問題,如果我們不清楚JVM怎樣使用內存,那么我將很難尋找到錯誤的真正原因。
下面便是每個內存區域的介紹。
1. 程序計數器
作用:存儲著下一條字節碼指令的地址
該內存空間為線程私有的,因為在多線程執行時,為了讓CPU能在線程切換后恢復到正確的執行位置,每個線程都需要有自己的程序計數器
2. Java虛擬機棧
作用:每個Java方法執行時,會創建一個棧幀,用于存儲局部變量表,操作數棧,動態鏈接,方法出口等信息。
調用方法,則對應在棧幀中入棧,方法執行完成,則棧幀中出棧。
同樣也是線程私有,與線程生命周期一致。
3. 本地方法棧
作用:與虛擬機棧作用相似,區別在于虛擬機棧用于為虛擬機執行Java方法服務,本地方法棧則為虛擬機執行Native方法服務
4. 堆
作用:用于存放對象實例和數組。
是被所有線程共享的一塊內存區域,因為需要內存回收的緣故,我們也將Java堆細分為新生代和老年代。內存回收可看內存回收策略
5. 方法區
作用:存儲被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據.
6. 運行時常量池
作用:為方法區的一部分,存儲Class文件中的常量池信息
總結
以上是生活随笔為你收集整理的JVM实战与原理---内存区域分配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql++多版本安装_MySQL多版
- 下一篇: Shiro介绍及主要流程