我对这个问题做了一些研究,但我没有真正找到答案。
例如,我知道,如果我在游戏循环中写这篇文章:
public void update () {
Object object = new Object();
}
然后我会有内存泄漏。
但是,如果您的类对象正在调用new
,则不会导致内存泄漏,对吗?由于您不是创建另一个对象,因此您只是给当前对象一个新值。
例如:
private Object object;
//...
public void update () {
object = new Object();
}
-edit
感谢您的帮助!我现在看到我几乎不知道记忆泄漏是什么或导致它是什么...但是我现在比以前更了解!
您的问题的前提是有缺陷的。
您从不在上调用新是已经创建的对象。您调用新的,并且总是(按规范(获取一个新对象(或类似异常或错误发生(。
您在这里问的是将它们分配给变量或字段。从内存泄漏的角度来看,它本身是没有区别的。是否也初始化了此字段或变量也没有区别:您只是在替换一个对一个对象的引用,用一个对另一个对象进行引用。
唯一会有所作为的是,如果您也 将对象添加到列表(或某些其他集合,数组等(,或添加包含字段的对象到列表等:然后,由于物体仍然可以到达,因此不可能收集垃圾。然后,您将有一个内存泄漏。
均不是内存泄漏。没有记忆丢失。垃圾收集器将收回内存,因为没有参考。不过,两个示例分配内存。每次称为新的时,它都会分配一个新对象。是否将新对象存储在某个地方并不重要。因此,在这两种情况下,这都会在一个紧密的循环中分配内存,然后收集垃圾。
作为旁注,Java很聪明,因此,如果您不使用这些值,则可以在一段时间后在一段时间后优化两个示例。为了避免(如果您真的想要慢码(使可变挥发性。