前言
示意圖
目錄
示意圖
1. 內存模型 & 分區(qū)
- Java虛擬機在運行Java程序時,會管理著一塊內存區(qū)域:運行時數(shù)據(jù)區(qū)
- 在運行時數(shù)據(jù)區(qū)里,會根據(jù)用途進行劃分:
- Java虛擬機棧(棧區(qū))
- 本地方法棧
- Java堆(堆區(qū))
- 方法區(qū)
- 程序計數(shù)器
示意圖
- 下面,我將詳細介紹每個內存模型分區(qū)
2. Java堆
- 示意圖
示意圖
- 簡介

示意圖
關于垃圾回收的講解會在接下來推出的文章里講解
3. Java虛擬機棧
- 示意圖
示意圖
- 簡介
示意圖
4. 本地方法棧
- 示意圖
示意圖
- 簡介
十分類似Java虛擬機棧,與Java虛擬機區(qū)別在于:服務對象,即
Java虛擬機棧為執(zhí)行 Java 方法服務;本地方法棧為執(zhí)行 Native方法服務
5. 方法區(qū)
- 示意圖
示意圖
- 簡介
示意圖
- 注
其內部包含一個運行時常量池,具體介紹如下:
示意圖
6. 程序計數(shù)器
- 示意圖
示意圖
- 簡介
示意圖
7. 額外知識:直接內存
- 定義:NIO類(JDK1.4引入)中基于通道和緩沖區(qū)的I/O方式 通過使用Native函數(shù)庫 直接分配 的堆外內存
- 特點:不受堆大小限制
不屬于虛擬機運行時數(shù)據(jù)區(qū)的一部分 & 不在堆中分配
- 應用場景:適用于頻繁調用的場景
通過一個 存儲在Java堆中的DirectByteBuffer對象 作為這塊內存的引用 進行操作,從而避免在 Java 堆和 Native堆之間來回復制數(shù)據(jù),提高使用性能
- 拋出的異常:OutOfMemoryError,即與其他內存區(qū)域的總和 大于 物理內存限制
8. 總結
本文全面講解JVM中的內存模型 & 分區(qū),總結如下
示意圖
作者:Carson_Ho
鏈接:https://juejin.im/post/6844903677279338509