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 次浏览

开启你的职业生涯

完成课程并获得认证

入门
广告