|
|
1
3
你的问题的前提是有缺陷的。 你 从不 呼叫新 在…上 已创建的对象。您调用new,并且总是(根据规范)得到一个新对象(或者发生异常或错误之类的情况)。 这里要问的是将它们分配给变量或字段。就其本身而言,从内存泄漏的角度来看,它是变量还是字段都没有区别。该字段或变量是否也已初始化也没有区别:您只是将对一个对象的引用替换为对另一个对象的引用。 唯一有区别的是如果你 而且 将对象添加到列表(或其他集合、数组等),或将包含字段的对象添加到列表等:这样,就不可能进行垃圾收集,因为对象仍然可以访问。那么你就会有内存泄漏。 |
|
2
2
这些例子都不是内存泄漏。没有内存丢失。垃圾收集器将回收内存,因为没有对它的引用。不过,这两个示例都分配内存。每次调用new时,它都会分配一个新对象。是否将新对象存储在某个位置并不重要。因此,在这两种情况下,这在一个紧密的循环中都是不好的,因为它会分配内存,然后必须对内存进行垃圾收集。 另一方面,Java非常聪明,因此如果这两个示例都处于一个紧密的循环中,因为您没有使用这些值,那么它很可能会在一段时间后优化掉这两个示例。为了避免这种情况(如果您真的想要慢代码),请将变量设置为volatile。 |