Java 中的内存泄漏

javaobject oriented programmingprogramming更新于 2025/7/23 1:16:17

在 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 print");
   }
}

输出

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 的类包含主函数,其中通过为两个向量对象分配过大的空间创建了它们。最后的打印行只是为了检查编译器是否到达该行。实际上,它没有,因为这些向量占用的空间很大,无法分配太多内存,从而导致错误。


相关文章


有用资源