JVM:圖文詳解Java虛擬機的內存結構

前言

  • 瞭解Java中的對象、變量等存放的內存區域十分重要
  • 本文將全面講解Java虛擬機中的內存模型 & 分區,希望你們會喜歡

在接下來的日子,我會推出一系列講解JVM的文章,具體如下;感興趣可持續關注 Carson_Ho的CSDN博客哦

示意圖


目錄

示意圖


1. 內存模型 & 分區

  • Java虛擬機在運行Java程序時,會管理着一塊內存區域:運行時數據區
  • 在運行時數據區裏,會根據用途進行劃分:
    1. Java虛擬機棧(棧區)
    2. 本地方法棧
    3. Java堆(堆區)
    4. 方法區
    5. 程序計數器

示意圖

  • 下面,我將詳細介紹每個內存模型分區

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中的內存模型 & 分區,總結如下

示意圖

  • 在接下來的日子,我會推出一系列講解JVM的文章,具體如下;感興趣的同學可以繼續關注本人運營CSDN博客哦:https://blog.csdn.net/carson_ho

示意圖


請幫頂 / 評論點贊!因爲你的鼓勵是我寫作的最大動力!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章