JVM執行時區域詳解。
我們知道的JVM記憶體區域有:堆和棧,這是一種泛的分法,也是按執行時區域的一種分法,堆是所有執行緒共享的一塊區域,而棧是執行緒隔離的,每個執行緒互不共享。
執行緒不共享區域
每個執行緒的資料區域包括程式計數器、虛擬機器棧和本地方法棧,它們都是在新執行緒建立時才建立的。
程式計數器(Program Counter Rerister)
程式計數器區域一塊記憶體較小的區域,它用於儲存執行緒的每個執行指令,每個執行緒都有自己的程式計數器,此區域不會有記憶體溢位的情況。
虛擬機器棧(VM Stack)
虛擬機器棧描述的是Java方法執行的記憶體模型,每個方法被執行的時候都會同時建立一個棧幀(Stack Frame)用於儲存區域性變數表、運算元棧、動態連結、方法出口等資訊。每一個方法被呼叫直至執行完成的過程就對應著一個棧幀在虛擬機器棧中從入棧到出棧的過程。
本地方法棧(Native Method Stack)
本地方法棧用於支援本地方法(native標識的方法,即非Java語言實現的方法)。
虛擬機器棧和本地方法棧,當執行緒請求分配的棧容量超過JVM允許的最大容量時丟擲StackOverflowError異常。
執行緒不共享區域如下圖綠色背景所示。
[圖片上傳中...(image-354d3a-1510636929990-1)]
執行緒共享區域
執行緒共享區域包含:堆和方法區。
堆(Heap)
堆是最常處理的區域,它儲存在JVM啟動時建立的陣列和物件,JVM垃圾收集也主要是在堆上面工作。
如果實際所需的堆超過了自動記憶體管理系統能提供的最大容量時丟擲OutOfMemoryError異常。
方法區(Method Area)
方法區是可供各條執行緒共享的執行時記憶體區域。儲存了每一個類的結構資訊,例如執行時常量池(Runtime Constant Pool)、欄位和方法資料、建構函式和普通方法的位元組碼內容、還包括一些在類、例項、介面初始化時用到的特殊方法。
當建立類和介面時,如果構造執行時常量池所需的記憶體空間超過了方法區所能提供的最大記憶體空間後就會丟擲OutOfMemoryError
執行時常量池(Runtime Constant Pool)
執行時常量池是方法區的一部分,每一個執行時常量池都分配在JVM的方法區中,在類和介面被載入到JVM後,對應的執行時常量池就被建立。執行時常量池是每一個類或介面的常量池(Constant_Pool)的執行時表現形式,它包括了若干種常量:編譯器可知的數值字面量到必須執行期解析後才能獲得的方法或欄位的引用。
如果方法區的記憶體空間不能滿足記憶體分配請求,那Java虛擬機器將丟擲一個OutOfMemoryError異常。
棧包含Frames,當呼叫方法時,Frame被推送到堆疊。一個Frame包含區域性變數陣列、運算元棧、常量池引用。
推薦閱讀
分享Java乾貨,高併發程式設計,熱門技術教程,微服務及分散式技術,架構設計,區塊鏈技術,人工智慧,大資料,Java面試題,以及前沿熱門資訊等。
相關文章
- JVM——記憶體區域:執行時資料區域詳解JVM記憶體
- JVM 執行時資料區詳解JVM
- JVM執行時資料區域JVM
- JVM詳解(三)——執行時資料區JVM
- JVM詳解(四)——執行時資料區-堆JVM
- JVM學習-執行時資料區域JVM
- JVM執行時記憶體資料區域JVM記憶體
- JVM(一)——Java 執行時的資料區域JVMJava
- 從零開始JVM(一):初探JVM執行時資料區域JVM
- JVM執行時資料區JVM
- 【深入學習JVM 01】執行時資料區域劃分JVM
- JVM(二)-記憶體區域之執行緒私有區域JVM記憶體執行緒
- JVM執行時資料區概述JVM
- 詳解Java 虛擬機器(第①篇)——執行時資料區域Java虛擬機
- JVM——04執行時資料區(2)JVM
- Java-JVM-執行時資料區JavaJVM
- JVM筆記【1】-- 執行時資料區JVM筆記
- java的執行時資料區域Java
- JVM——【執行時資料區】程式計數器JVM
- java記憶體區域-執行時資料區Java記憶體
- Java 虛擬機器執行時資料區詳解Java虛擬機
- JVM虛擬機器-執行時資料區概述JVM虛擬機
- 虛擬機器系列 | JVM執行時資料區虛擬機JVM
- JVM 執行緒堆疊分析過程詳解JVM執行緒
- Java 虛擬機器:看完就懂 JVM 架構和執行時資料區 (記憶體區域)Java虛擬機JVM架構記憶體
- JVM-執行時資料區之PC暫存器JVM
- Java 執行時(RUNTIME)註解詳解Java
- java虛擬機器——執行時資料區域Java虛擬機
- JVM結構-記憶體結構(執行時資料區)JVM記憶體
- JVM區域劃分JVM
- Java記憶體區域(執行時資料區域)和記憶體模型(JMM)Java記憶體模型
- 檢視JVM執行時引數JVM
- JVM面試問題系列:深入詳解JVM 記憶體區域及記憶體溢位分析JVM面試記憶體溢位
- 【JVM之記憶體與垃圾回收篇】執行時資料區概述及執行緒JVM記憶體執行緒
- 圖文並茂,帶你認識 JVM 執行時資料區JVM
- JVM的特性,透過程式碼來揭秘執行時資料區JVM
- JVM執行時資料區探索與直接記憶體的使用JVM記憶體
- JVM系列(二) - JVM記憶體區域JVM記憶體