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