我确信每个人都知道Singleton模式的以下实现:
public class Singleton {
private static volatile Singleton instance;
private Singleton(){}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.instance){
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}}
我知道这是一个与延迟初始化相关的实现。 但Java ClassLoader以惰性模式加载类。
如何不对任何对象进行懒惰初始化? 无论对象实现如何,只有在使用单词“new”或调用工厂方法时才会创建实例。
什么是非懒惰的类加载?
答案 0 :(得分:4)
非延迟加载会在加载类时立即实例化instance
,而不是等到第一次调用getInstance()
。
public class Singleton {
private static volatile Singleton instance = new Singleton();
private Singleton() { }
public static Singleton getInstance() {
return instance;
}
}
如果该类已加载但没有人调用getInstance()
,则会浪费时间和内存来创建一个从未使用过的对象。