创建不可由GC收集的java类 1 月,4 周 Questions & Answers 45 我想创建一个类: -只有一个实例 -在我的应用程序的整个生命周期内都可以访问。 -类不必由垃圾收集器销毁 我可以通过使用静态模式或单例模式来实现这一点吗 谢谢
# 1 楼答案 您可以使用枚举单例 class MySingleton implements MyInterface { INSTANCE; // methods } 理想情况下,这样的单例应该是无状态的。有状态单例很难进行单元测试/容易出错 如果它不是无状态的,我建议改用依赖注入。i、 e.在应用程序加载时创建一次对象,并将其传递给所有需要它的实例
# 2 楼答案 确保类不能被垃圾收集的方法是确保它保持可访问性。你可以: 在另一个同样可以访问的类中引用它 将其加载到初始类加载器中(始终可以访问) 将类的实例放入保持可访问的变量中 等等李> 实际上,除非您的类是使用您自己创建的类加载器动态加载的,否则类不太可能被GC卸载/销毁 另一方面。。。如果您真的担心单个实例(而不是类)被垃圾收集,那么单例设计模式的正常实现会考虑: public class MySingleton { private static Integer instance = new Integer(42); public static Integer getInstance() { return instance; } } 只要MySingleton类保持可访问状态,static变量就可以访问。。。通常在应用程序运行的生命周期内;见上文 一个public static变量也可以工作,尽管从其他角度来看这是个坏主意
# 1 楼答案
您可以使用枚举单例
理想情况下,这样的单例应该是无状态的。有状态单例很难进行单元测试/容易出错
如果它不是无状态的,我建议改用依赖注入。i、 e.在应用程序加载时创建一次对象,并将其传递给所有需要它的实例
# 2 楼答案
确保类不能被垃圾收集的方法是确保它保持可访问性。你可以:
实际上,除非您的类是使用您自己创建的类加载器动态加载的,否则类不太可能被GC卸载/销毁
另一方面。。。如果您真的担心单个实例(而不是类)被垃圾收集,那么单例设计模式的正常实现会考虑:
只要
MySingleton
类保持可访问状态,static
变量就可以访问。。。通常在应用程序运行的生命周期内;见上文一个
public static
变量也可以工作,尽管从其他角度来看这是个坏主意