【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )
文章目錄
- 一、Java VisualVM 工具安裝 Visual GC 插件
- 二、使用 Java VisualVM 分析 GC 內存
一、Java VisualVM 工具安裝 Visual GC 插件
使用
jvisualvm命令 , 打開 Java VisualVM 工具 ,
在彈出的 " 插件 " 對話框中 , 選擇安裝 " Visual GC " 插件 ,
點擊 " 安裝 " 按鈕 , 彈出如下界面 , 點擊 " 下一步 " 按鈕 , 繼續向后執行 ;
選擇 " 我接受所有許可證協議中的條款(A) " 選項 , 點擊 " 安裝 " 按鈕 ;
之后會很快安裝完畢 , 插件安裝完畢后 , 如下顯示 , 點擊 " 完成 " 按鈕 , Visual GC 插件 安裝完成 ;
在 Java VisualVM 工具 中 , 點擊 IntelliJ IDEA 查看該進程的 GC 情況 , 選擇 Visual GC 選項卡 , 即可查看內存細節 , 如 : 元空間 Metaspace , 老年代 Old Gen , 年輕代中的 Eden Space 區域 , Survivor 0 / 1 區域 ;
二、使用 Java VisualVM 分析 GC 內存
分析 GC 時間 與 Eden Space 區域 內存占用 , 每次 GC 時 , Eden Space 區域 內存使用就變小 , 將其中的對象都丟到了 Survivor 0 或 Survivor 1 區域中 ;
分析 GC 時間 與 Survivor 0 和 Survivor 1 區域的內存使用情況 , 每次 GC 時 , 清空一個區域 , 將數據都拷貝到另一個區域 , 這是垃圾回收算法中的 復制算法 ;
每次 GC 垃圾回收 , 對象的 分代年齡 都會 +1 , 當分代年齡到達一定數量 , 該對象就被判定為永生對象 , 同時將永生對象放到 老年區 , 老年區的內存也是緩慢增加 ;
一旦這幾個內存區域全部裝滿 , 就會出現 OOM 異常 ; 左側的 Old Gen 是老年代 , 右側的 Eden + Survivor 0 + Survivor 1 是年輕代區域 ;
在 年輕代 內存 中 , minor GC 垃圾回收非常頻繁 , 每次都要針對年輕代中的 對象 進行 GC Root 可達性分析 , 如果不可達 , 直接回收 , 如果可達 , 分代年齡 + 1 , 分代年齡到達 15 后 轉入 老年代 ;
在 老年代 內存 中 , full GC 垃圾回收 , 不是很頻繁 , 每次對 永生對象 進行 GC Root 可達性分析 , 不可達的對象直接回收 ;
如果一次創建一個大對象 , 則直接放入老年代中 , 因為大對象需要大塊內存 , 在年輕代中 , 不適合操作大塊內存 , 有很多內存碎片 ;
如果 年輕代 , 老年代 , 內存區域用完 , 新對象 創建后沒有足夠的內存存放 , 則出現 OOM ;
總結
以上是生活随笔為你收集整理的【Java 虚拟机原理】垃圾回收算法( Java VisualVM 工具 | 安装 Visual GC 插件 | 使用 Java VisualVM 分析 GC 内存 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java 虚拟机原理】垃圾回收算法 (
- 下一篇: 【Java 虚拟机原理】Class 字节