Lazy allocation simply means not allocating a resource until it is actually needed. This is common with singleton objects, but strictly speaking, any time a resource is allocated as late as possible, you have an example of lazy allocation.
By delaying allocation of a resource until you actually need it, you can decrease startup time, and even eliminate the allocation entirely if you never actually use the object. In contrast, you could pre-allocate a resource you expect to need later, which can make later execution more efficient at the expense of startup time, and also avoids the possibility of the allocation failing later in program execution.
The following code provides an example of a lazily-allocated singleton:
public class Widget {
private Widget singleton;
public static Widget get() {
if (singleton == null) {
singleton = new Widget();
}
return singleton;
}
private Widget() {
// ...
}
// ...
}
Do note that this code isn't threadsafe. In most cases, access to the get()
method should be synchronized in some fashion.
A similar (and perhaps more general) concept is lazy initialization.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…