Java 中的記憶體洩漏


在 Java 中,垃圾收集(銷燬程式的工作)是使用垃圾收集自動進行的。但是,如果程式碼中存在物件引用這些物件,會怎樣?它們無法取消分配,即無法清除其記憶體。如果這種情況下反覆發生,而建立或引用的物件根本沒有使用,它們就會變得毫無用處。這就是所稱的記憶體洩漏。

如果超出記憶體限制,程式將透過丟擲錯誤(即“OutOfMemoryError”)終止。這就是為什麼始終建議刪除對物件的任何引用,以便 Java 垃圾收集器可以自動銷燬它。

以下是說明編譯器在嘗試使用太多記憶體時如何用完空間的示例 −

示例

 即時演示

import java.util.Vector;
public class Demo{
   public static void main(String[] args){
      Vector my_v1 = new Vector(314567);
      Vector my_v2 = new Vector(784324678);
      System.out.println("This is the last line to be printed");
   }
}

輸出

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Vector.<init>(Vector.java:142)
at java.base/java.util.Vector.<init>(Vector.java:155)
at Demo.main(Demo.java:7)

名為 Demo 的類包含主函式,其中兩個向量物件已透過為它們分配過大的空間而建立。最後一行列印只是用來檢查編譯器是否到達該行。事實上,編譯器並不會到達,因為這些向量所佔用的空間巨大,無法分配如此多的記憶體,從而導致錯誤。

更新於:07-Jul-2020

396 次瀏覽

開啟你的職業生涯

完成課程並獲得認證

入門
廣告