“懒惰分配”对象是什么意思,它有什么用处?
惰性分配指的是在实际需要时才分配资源。这种情况在单例对象中很常见,但严格来说,只要尽可能晚地分配资源,就可以看作是惰性分配的示例。
将资源的分配推迟到实际需要时可以减少启动时间,甚至可以完全避免分配,如果你从未使用该对象的话。与此相反,你可以预先分配一个你后来可能需要的资源,这可以使后续执行更加高效,但会增加启动时间,并避免了程序执行过程中可能出现的分配失败。
以下代码提供了一个惰性分配的单例示例:
public class Widget {
private Widget singleton;
public static Widget get() {
if (singleton == null) {
singleton = new Widget();
}
return singleton;
}
private Widget() {
// ...
}
// ...
}
请注意,此代码不是线程安全的。在大多数情况下,访问 get()
方法应该以某种方式进行同步。
一个类似(或者更一般)的概念是延迟初始化。