讓我說我有一個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。 –