让我说我有一个Java代码,它不断运行,每分钟应该得到一个真正沉重的对象数组,并继续他们。下面的代码做这项工作: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()
的一部分,是活的,直到我退出程序)。
你能澄清这方面适用于上面列出的代码?
我只是在文章中的例子,其中作者声称没有'array [N] = null;'内存会泄漏困惑我,为什么在我的代码中没问题,但在他的例子中它是这样做的问题?这是因为'pop()'只是返回元素,但不对数组执行任何操作,它是元素赋值? –
他的例子等同于您保留对旧数组的引用。当一个对象从堆栈中弹出时,堆栈不应该保持对该对象的引用,因此'array [N] = null;'。不同之处在于他没有任何新值(直到有人调用'push'),这就是为什么他的代码赋值为null。 –