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