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 的类包含主函数,其中两个矢量对象已通过为它们分配过大的空间而创建。最后一行打印只是用来检查编译器是否到达该行。事实上,编译器并不会到达,因为这些矢量所占用的空间巨大,无法分配如此多的内存,从而导致错误。
广告