首页 > 解决方案 > 在已创建的对象上使用“new”语句会导致内存泄漏吗?

问题描述

我对这个问题做了一些研究,但我还没有真正找到答案。

例如,我知道如果我在游戏循环中写了这个:

public void update () {
    Object object = new Object();
}

然后我会有内存泄漏。

但是如果你有一个你正在调用的类对象new,它不会导致内存泄漏,对吧?由于您没有创建另一个对象,因此您只是给当前对象一个新值。

例如:

private Object object;

//...

public void update () {
    object = new Object();
}

-编辑

谢谢你的帮助!我现在发现我几乎不知道内存泄漏是什么或导致它的原因......但我现在比以前更了解了!

标签: javamemorymemory-leaks

解决方案


你的问题的前提是有缺陷的。

永远不会已经创建的对象上调用 new 。您调用 new,并且您总是(按规范)获得一个新对象(或发生异常或错误之类的事情)。

您在这里询问的是将它们分配给变量或字段。就其本身而言,从内存泄漏的角度来看,它是变量还是字段都没有区别。这个字段或变量是否也被初始化也没有区别:你只是用对另一个对象的引用替换对一个对象的引用。

唯一会有所不同的是,如果您还将对象添加到 List(或其他一些集合、数组等),或者将包含该字段的对象添加到 List 等:那么,就不可能垃圾收集,因为对象仍然可以访问。然后你会有内存泄漏。


推荐阅读