我有单例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 变量不会花费很长时间,因此在任何情况下使用延迟初始化都不会给您带来优势。
关于java - 对于一小段代码来说,延迟初始化值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912405/