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

破除 Java 迷思(一):垃圾回收不等於不用管記憶體

     編輯:Java 相關知識

垃圾回收(GC)是 Java 程式設計師大幫手,但不能因 GC 存在就忽略記憶體問題,否則將導致嚴重後果。

GC 不可靠的特性

  • 演算法因 JVM 而異:無法依賴特定 GC 行為,若要跨 JVM 穩定運行
  • 單次 GC 不保證回收所有可回收物件:現代 GC 基於「多數物件生命週期短」優化,減少檢查長壽命物件頻率。釋放特定物件可能需多次 GC
  • System.gc() 僅是建議:通常觸發完整回收,比 JVM 自動觸發更徹底,但不保證回收所有可回收物件

程式設計師常見錯誤:持有不再需要的參考

阻止 GC 回收。自行管理集合時易發生。以 ObjStack 為例:

錯誤實作

public Object pop() {
    index--;
    return stack[index]; // 僅移動索引,陣列仍持有物件參考!
}

push 8 個物件後 pop 3 次,索引變 5,但陣列位置 5-7 仍持有參考,物件無法被 GC 回收,只有後續 push 覆蓋才可能釋放。

正確實作

public Object pop() {
    index--;
    Object o = stack[index];
    stack[index] = null; // 釋放參考,讓 GC 能回收
    return o;
}

原則

不再需要的物件,務必釋放參考。可用記憶體越少,GC 執行頻率越高,嚴重損害效能。

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