我有单例A.classRunnable loadTask可能会被唤醒,这就是为什么我正在考虑延迟初始化。我担心内存使用率。所以问题是,懒惰初始化值得实现吗?否则,用于函数主体的内存消耗的内存将少于用于即时初始化的内存,并且更容易忽略内存消耗差异。

我知道函数的定义必须在某处消耗内存。

附言我了解函数主体的内存未在堆中分配。

附言Instrumentation.class,sizeOf,Runtime.freeMemory()仅适用于类字段/属性。

class A_LazyInit {
    Runnable loadTask;
    void load() {
        if(loadTask == null) loadTask = new Runnable() {
            public void run() {
                loadFileFromInternet();
            }
        };
        new Thread(loadTask).start();
    }
    void useMethod() {
        if(isGoodCondition()) load();
    }
}




class A {
    Runnable loadTask = new Runnable() {
        public void run() {
            loadFileFromInternet();
        }
    };
    void useMethod() {
        if(isGoodCondition()) new Thread(loadTask).start();
    }
}

最佳答案

您不会在这里使用延迟初始化来保存任何内存。无论您是否急切地初始化代码,代码的内存都将保留(在加载类时分配)。

由于初始化loadTask变量不会花费很长时间,因此在任何情况下使用惰性初始化都不会给您带来好处。

10-06 11:53