Java 内存泄漏

在Java中,垃圾回收(析构函数的工作)是使用垃圾回收自动完成的。但是,如果代码中有引用它们的对象怎么办?它无法取消分配,即无法清除其内存。如果这种情况一再发生,并且创建或引用的对象根本没有被使用,它们就会变得无用。这就是所谓的内存泄漏。

如果超过了内存限制,则程序将通过抛出错误(即“ OutOfMemoryError”)而终止。这就是为什么始终建议删除对对象的所有引用,以便Java Garbage Collector(垃圾回收器)可以自动销毁它的原因。

下面的示例说明了在尝试使用过多内存时编译器如何耗尽空间-

示例

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("这是要打印的最后一行");
   }
}

输出结果

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

一个名为Demo的类包含了一个主函数,其中有两个向量对象,通过给它们分配过大的空间而创建。最后的打印行只是用来检查编译器是否达到这一行。实际上,它不会,因为这些向量占用的空间很大,所以无法分配大量内存,从而导致错误。