https://juejin.cn/post/7325069743143157801
在Java中,单例实例通常是不会被垃圾回收器(GC)回收的,主要原因是单例模式的设计意图是在程序的整个生命周期内保持只有一个实例。
具体来说,单例的一个实例被私有静态成员变量所引用。在 Java 中,静态成员变量属于类级别的,它们的生命周期和类的加载、卸载一致。只要类没有被卸载,这些静态成员变量就会一直保持在内存中,也就不会成为垃圾回收器的回收目标。
下面是一个单例实现的例子:
public class MySingleton {
private static MySingleton instance = new MySingleton();
private MySingleton() {
// 私有构造函数
}
public static MySingleton getInstance() {
return instance;
}
// 其他方法...
}
在这个例子中,只要MySingleton
类没有被卸载,instance
因为被getInstance()
方法静态引用,所以它不会被GC回收。
在一些特定的情况下,单例可以被回收,例如:
尽管单例实例通常不会被 GC 回收,但是也应当注意资源管理和程序设计,以防止内存泄漏或者无法预料的单例状态。