13 張圖解 Java 中的記憶體模型

tony0087發表於2021-09-09

前言

  • 瞭解Java中的物件、變數等存放的記憶體區域十分重要
  • 本文將全面講解Java虛擬機器中的記憶體模型 & 分割槽,希望你們會喜歡

目錄
圖片描述
1.記憶體模型 & 分割槽

Java虛擬機器在執行Java程式時,會管理著一塊記憶體區域:執行時資料區

在執行時資料區裡,會根據用途進行劃分:

  • Java虛擬機器棧(棧區)
  • 本地方法棧
  • Java堆(堆區)
  • 方法區
  • 程式計數器
    圖片描述
    下面,我將詳細介紹每個記憶體模型分割槽

2.Java堆
圖片描述
簡介
圖片描述
3. Java虛擬機器棧
圖片描述
簡介
圖片描述
4. 本地方法棧
圖片描述
簡介:十分類似Java虛擬機器棧,與Java虛擬機器區別在於:服務物件,即Java虛擬機器棧為執行 Java 方法服務;本地方法棧為執行 Native方法服務

5.方法區
圖片描述
簡介
圖片描述
注:其內部包含一個執行時常量池,具體介紹如下:
圖片描述
6.程式計數器
圖片描述
簡介
圖片描述
7. 額外知識:直接記憶體

  • 定義:NIO類(JDK1.4引入)中基於通道和緩衝區的I/O方式 透過使用Native函式庫 直接分配 的堆外記憶體
  • 特點:不受堆大小限制
    不屬於虛擬機器執行時資料區的一部分 & 不在堆中分配
  • 應用場景:適用於頻繁呼叫的場景
    透過一個 儲存在Java堆中的DirectByteBuffer物件 作為這塊記憶體的引用 進行操作,從而避免在 Java 堆和 Native堆之間來回複製資料,提高使用效能
  • 丟擲的異常:OutOfMemoryError,即與其他記憶體區域的總和 大於 實體記憶體限制

8. 總結
本文全面講解JVM中的記憶體模型 & 分割槽,總結如下
圖片描述
作者:Carson_Ho

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1747/viewspace-2826405/,如需轉載,請註明出處,否則將追究法律責任。

相關文章