我有单例A.class
。 Runnable 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变量不会花费很长时间,因此在任何情况下使用惰性初始化都不会给您带来好处。