views:

809

answers:

1

What does lazy allocation of objects mean and how is it useful?

+8  A: 

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.

Derek Park
are the terms "late objects" and "lazy init" synonymous? As in the title of this text *Java How to Program: Late Objects Version*? I googled but couldn't find any references beyond that text.
hydeph
@hydeph, it looks like Deitel has two versions of that book, one with "late objects", where the initial chapters are in procedural style (and introducing classes/objects later) and one with "early objects", where classes/objects are introduced immediately. They are using "late objects" and "early objects" to distinguish between these teaching styles. It doesn't have any relationship to lazy initialization.
Derek Park