java記憶體區域-執行時資料區
概述
java虛擬機器在執行java程式的時候會把它所管理的記憶體分為若干個不同的區域,每個區域有不同的功能、以及建立和銷燬時間,有些區域隨著虛擬機器的啟動而存在,有些區域隨使用者執行緒的啟動和結束建立和銷燬。
1. 程式計數器:
程式計數器佔用的記憶體比較小,它是當前執行緒所執行的位元組碼的行號指示器,位元組碼直譯器工作時就是通過改變這個計數器的值來選取下一條需要執行的位元組碼指令。分支、迴圈、跳轉、異常處理、執行緒恢復等基礎功能都需要依賴這個計數器完成。
該記憶體空間是執行緒私有的,多執行緒是通過執行緒輪流切換並分配處理器執行時間的方式來實現的,同一時間處理器只會處理單個執行緒的指令,每個執行緒都需要記錄本執行緒當前執行的位元組碼指令位置,各個執行緒之間互不影響,獨立儲存。
如果執行緒執行的是java方法,則這個計數器記錄的是正在執行的虛擬機器位元組碼指令的地址;如果java虛擬機器執行的是Native方法,則計數器的值為空。該記憶體區域為虛擬機器中唯一沒有OutOfMemoryError的區域。
2. java虛擬機器棧:
特點:執行緒私有
生命週期:和執行緒相同,隨著執行緒的建立而產生,執行緒執行結束而回收
內部結構:以棧幀的形式執行和儲存資料,每個方法執行的同時會建立棧幀,用於儲存區域性變數表(this, 方法引數),運算元棧(java是基於棧的執行引擎,其實說的就是運算元棧,用於執行java位元組碼指令)、動態連線(程式碼執行期間將符號引用轉換成直接引用)和方法出口(記錄返回到方法被呼叫的位置)等資訊。每個方法的呼叫到執行完成對過程對應的是棧幀在虛擬機器中入棧和出棧的過程。
異常: StackOverflowError:執行緒請求的棧深度大於虛擬機器所允許的棧深度
OutOfMemoryError:如果java虛擬機器棧在動態擴充套件到時候無法申請到足夠的記憶體
3. 本地方法棧:
和java虛擬機器棧的作用是相似的,只是java虛擬機器棧呼叫的是java方法,本地方法棧則是java虛擬機器使用到Native方法服務。
4. java堆
簡單介紹: 所有的物件都需要在該記憶體區域儲存。該區域是所有執行緒共享的,java虛擬機器記憶體管理中最大的一塊記憶體空間。垃圾收集器管理的主要區域,可分為Eden空間、Form Survivor空間、To Suivivor空間。
異常資訊: 如果堆中沒有足夠的記憶體區域完成物件的記憶體分配,則會丟擲OutOfMemoryError一次。
5. 方法區:
特點: 執行緒共享
儲存資訊:
- 類資訊:
- 型別全限定名。
- 型別的直接超類的全限定名(除非這個型別是java.lang.Object,它沒有超類)。
- 型別是類型別還是介面型別。
- 型別的訪問修飾符(public、abstract或final的某個子集)。
- 任何直接超介面的全限定名的有序列表。
- 型別的常量池。
- 欄位資訊。
- 方法資訊。
- 除了常量意外的所有類(靜態)變數。
- 一個到類ClassLoader的引用。
- 一個到Class類的引用。
- 常量:final
- 靜態變數:類變數,static
- 即時編譯器編譯後的程式碼:xxx
- 執行時常量池:儲存編譯期生成的各種字面量和符號引用
相關文章
- Java記憶體區域(執行時資料區域)和記憶體模型(JMM)Java記憶體模型
- JVM執行時記憶體資料區域JVM記憶體
- JVM——記憶體區域:執行時資料區域詳解JVM記憶體
- Java 執行時資料區和記憶體模型Java記憶體模型
- 自動記憶體管理機制_執行時資料區域記憶體
- java的執行時資料區域Java
- Java 虛擬機器:看完就懂 JVM 架構和執行時資料區 (記憶體區域)Java虛擬機JVM架構記憶體
- Java記憶體區域Java記憶體
- JVM(二)-記憶體區域之執行緒私有區域JVM記憶體執行緒
- JVM(一)——Java 執行時的資料區域JVMJava
- JVM執行時資料區域JVM
- JVM結構-記憶體結構(執行時資料區)JVM記憶體
- Java記憶體區域和記憶體模型Java記憶體模型
- java虛擬機器——執行時資料區域Java虛擬機
- JVM執行時資料區探索與直接記憶體的使用JVM記憶體
- Java記憶體區域學習Java記憶體
- JVM學習-執行時資料區域JVM
- Java的記憶體區域劃分Java記憶體
- 【JVM之記憶體與垃圾回收篇】執行時資料區概述及執行緒JVM記憶體執行緒
- Java虛擬機器執行時資料區域劃分Java虛擬機
- JAVA記憶體區域與記憶體溢位異常Java記憶體溢位
- Android記憶體優化(一):Java記憶體區域Android記憶體優化Java
- Java記憶體管理原理及記憶體區域詳解Java記憶體
- 【JVM記憶體區域】JVM記憶體
- JVM 記憶體區域JVM記憶體
- JVM記憶體區域JVM記憶體
- Java虛擬機器01——Java記憶體資料區域和記憶體溢位異常Java虛擬機記憶體溢位
- JDK1.8-Java虛擬機器執行時資料區域和HotSpot虛擬機器的記憶體模型JDKJava虛擬機HotSpot記憶體模型
- Java記憶體區域總結(堆、棧、方法區等)Java記憶體
- Java記憶體區域有哪些構成?Java記憶體
- Java中的記憶體區域劃分Java記憶體
- JVM的記憶體區域JVM記憶體
- JVM筆記【1】-- 執行時資料區JVM筆記
- JVM(2)-Java記憶體區域與記憶體溢位異常JVMJava記憶體溢位
- Java的記憶體管理機制之記憶體區域劃分Java記憶體
- Java虛擬機器之記憶體區域Java虛擬機記憶體
- 詳解Java 虛擬機器(第①篇)——執行時資料區域Java虛擬機
- JVM執行時資料區JVM