假设我有一个 Java 代码,它不断运行并且每分钟都应该获取一组非常重的对象并处理它们。以下代码完成这项工作:
while (true) {
ArrayList<HeavyObject> objArr = this.getHeavyObject();
drv.processObject(objArr);
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
执行ArrayList<HeavyObject> objArr = this.getHeavyObject();
时这段代码可能会导致内存泄漏吗?不分配 objArr = null
在获得新一批重物之前?
根据 « Memory leaks in Java » 文章使用分配给 null
很重要如果我不离开变量的范围(此代码是 main()
的一部分,并且在我退出程序之前一直有效)。
您能否阐明这方面应用于上面列出的代码?
最佳答案
只要 drv
对象不维护对 objArr
的引用,您的代码就不会出现泄漏。对“重对象”的引用 objArr
仅限于 while 循环的范围,因此一旦您离开迭代,它就有资格进行垃圾回收。
但是,如果 drv
维护对对象的永久引用,那么只要引用持续存在,就不会收集它。
您提到的链接中的示例是当对数据的引用超出范围时(在他们的示例中, Stack
类的 E[]
数组字段) 且无法收集。
关于java - Java中潜在的内存泄漏,这段代码是否会导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35223924/