前言
- 瞭解
Java
中的對象、變量等存放的內存區域十分重要 - 本文將全面講解
Java
虛擬機中的內存模型 & 分區,希望你們會喜歡
在接下來的日子,我會推出一系列講解
JVM
的文章,具體如下;感興趣可持續關注 Carson_Ho的CSDN博客哦
目錄
1. 內存模型 & 分區
Java
虛擬機在運行Java
程序時,會管理着一塊內存區域:運行時數據區- 在運行時數據區裏,會根據用途進行劃分:
Java
虛擬機棧(棧區)- 本地方法棧
Java
堆(堆區)- 方法區
- 程序計數器
- 下面,我將詳細介紹每個內存模型分區
2. Java堆
-
示意圖
-
簡介
關於垃圾回收的講解會在接下來推出的文章裏講解
3. Java虛擬機棧
-
示意圖
-
簡介
4. 本地方法棧
- 示意圖
- 簡介
十分類似Java
虛擬機棧,與Java虛擬機區別在於:服務對象,即
Java虛擬機棧爲執行Java
方法服務;本地方法棧爲執行Native
方法服務
5. 方法區
-
示意圖
-
簡介
- 注
其內部包含一個運行時常量池,具體介紹如下:
6. 程序計數器
- 示意圖
- 簡介
7. 額外知識:直接內存
- 定義:
NIO
類(JDK
1.4引入)中基於通道和緩衝區的I/O
方式 通過使用Native
函數庫 直接分配 的堆外內存 - 特點:不受堆大小限制
不屬於虛擬機運行時數據區的一部分 & 不在堆中分配
- 應用場景:適用於頻繁調用的場景
通過一個 存儲在
Java
堆中的DirectByteBuffer
對象 作爲這塊內存的引用 進行操作,從而避免在Java
堆和Native
堆之間來回複製數據,提高使用性能
- 拋出的異常:
OutOfMemoryError
,即與其他內存區域的總和 大於 物理內存限制
8. 總結
- 本文全面講解JVM中的內存模型 & 分區,總結如下
- 在接下來的日子,我會推出一系列講解
JVM
的文章,具體如下;感興趣的同學可以繼續關注本人運營CSDN博客哦:https://blog.csdn.net/carson_ho