什么是非延迟初始化?

时间:2018-01-23 02:43:19

标签: java classloader lazy-initialization

我确信每个人都知道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”或调用工厂方法时才会创建实例。

什么是非懒惰的类加载?

1 个答案:

答案 0 :(得分:4)

非延迟加载会在加载类时立即实例化instance,而不是等到第一次调用getInstance()

public class Singleton {
    private static volatile Singleton instance = new Singleton();

    private Singleton() { }

    public static Singleton getInstance() {
        return instance;
    }
}

如果该类已加载但没有人调用getInstance(),则会浪费时间和内存来创建一个从未使用过的对象。