【发布时间】:2013-12-15 08:11:39
【问题描述】:
直到几周前,我还以为我知道何时创建字段和方法 static 或 non-static。例如,当一个字段(比如另一个类的对象)对于该类的任意数量的对象都是唯一的,它应该被设为static。
但几周前我读到了关于 JVM 垃圾收集的文章。
我知道static 字段永远不会被垃圾回收并一直保留在内存中,除非类加载器本身被垃圾回收。
但如果我不设置那个字段static,至少它会被垃圾回收。
因此,在使字段/方法静态与否之间似乎存在非常细的界限。
谁能在决定时向我解释一下这条细线,以便我的应用程序更有效率。
【问题讨论】:
-
该字段没有被垃圾收集有什么问题?您希望它在应用程序的整个生命周期内都可用,不是吗?所以对象没有被 GC 是很正常的。应用程序消耗内存。这是正常的和预期的。将其设置为 null 将使其可用于 GC(除非它可以从其他地方访问)。