首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JVM 記憶體管理:GC 核心策略與根搜尋算法入門

     編輯:Java 相關知識

為何要懂 GC?

生產環境難免遇到 OOM 與記憶體洩漏。不懂 GC 原理時往往無從下手;掌握核心策略至少能有的放矢,不至於束手無策。

GC 策略解決三大問題

  1. 哪些物件可回收?
  2. 何時回收?
  3. 採用何種方式回收?

首要問題是「可回收性判定」。

引用計數 vs 根搜尋

引用計數:為每個物件維護計數器,引用+1,釋放-1,歸零即回收。致命缺陷:無法處理循環引用。例如兩物件互相引用,計數永不歸零,導致記憶體洩漏。

Object a = new Object();
Object b = new Object();
a.field = b;
b.field = a;
a = null; b = null; // 計數仍為 1,無法回收

根搜尋算法:設定 GC Roots,從根出發搜尋,不可達物件即為垃圾。完美解決循環引用。

根搜尋示意圖

Java 中的 GC Roots 包含:

  • 虛擬機棧中引用的物件(局部變數表)
  • 方法區中類靜態屬性引用的物件
  • 方法區中常量引用的物件
  • 本地方法棧中 JNI 引用的物件

三大經典收集演算法

在根搜尋基礎上,現代 JVM 實現三種核心演算法:

  • 標記-清除
  • 複製
  • 標記-整理

詳細原理將在後續章節展開。

結語

理解根搜尋是掌握 JVM GC 的鑰匙。下一章將深入剖析三大收集演算法的具體運作細節。

作者:zuoxiaolong(左潇龍)
出處:博客園左潇龍的技術博客

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved