在已创建的对象上使用 "new" 语句是否会导致内存泄漏?



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

例如,我知道,如果我在游戏循环中写这篇文章:

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

然后我会有内存泄漏。

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

例如:

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

-edit

感谢您的帮助!我现在看到我几乎不知道记忆泄漏是什么或导致它是什么...但是我现在比以前更了解!

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

从不在上调用新是已经创建的对象。您调用新的,并且总是(按规范(获取一个新对象(或类似异常或错误发生(。

您在这里问的是将它们分配给变量或字段。从内存泄漏的角度来看,它本身是没有区别的。是否也初始化了此字段或变量也没有区别:您只是在替换一个对一个对象的引用,用一个对另一个对象进行引用。

唯一会有所作为的是,如果您 将对象添加到列表(或某些其他集合,数组等(,或添加包含字段的对象到列表等:然后,由于物体仍然可以到达,因此不可能收集垃圾。然后,您将有一个内存泄漏。

均不是内存泄漏。没有记忆丢失。垃圾收集器将收回内存,因为没有参考。不过,两个示例分配内存。每次称为新的时,它都会分配一个新对象。是否将新对象存储在某个地方并不重要。因此,在这两种情况下,这都会在一个紧密的循环中分配内存,然后收集垃圾。

作为旁注,Java很聪明,因此,如果您不使用这些值,则可以在一段时间后在一段时间后优化两个示例。为了避免(如果您真的想要慢码(使可变挥发性。

最新更新