问题:
在 Java 中,考虑一个假设的实用程序类,仅在程序设置:
class MyUtils { private static MyObject myObject = new MyObject(); /*package*/static boolean doStuff(Params... params) { // do stuff with myObject and params... } }
myObject 是否有资格成为垃圾不再需要时进行回收,还是会在整个程序的生命周期中持续存在?
答案:
静态字段在加载其类时不符合垃圾回收条件。只有当负责加载该类的类加载器本身被垃圾回收时,它们才能被收集。
根据 Java 语言规范 (JLS) 第 12.7 节“类和接口的卸载”:
“当且仅当其定义的类加载器可以被垃圾收集器回收时,类或接口才可以被卸载[...]加载的类和接口引导加载程序可能不会卸载。“
因此,在提供的示例中,只要加载类 MyUtils,myObject 就会持续存在。在加载 MyUtils 的类加载器也符合垃圾回收资格之前,它不会被垃圾回收。
以上是Java 的垃圾收集器会回收'MyUtils”中的'myObject”等静态字段吗?的详细内容。更多信息请关注PHP中文网其他相关文章!