Подтвердить что ты не робот

Что такое ленивое выделение?

Что означает ленивое распределение объектов и как оно полезно?

4b9b3361

Ответ 1

Ленивое распределение просто означает не выделять ресурс, пока он не понадобится. Это характерно для одноэлементных объектов, но, строго говоря, в любое время, когда ресурс выделяется как можно позже, у вас есть пример ленивого выделения.

Задерживая выделение ресурса до тех пор, пока вам это не понадобится, вы можете уменьшить время запуска и даже полностью исключить выделение, если вы никогда не используете этот объект. Напротив, вы можете предварительно выделить ресурс, который вам понадобится позже, что может сделать более позднее исполнение более эффективным за счет времени запуска, а также позволяет избежать возможности отказа в дальнейшем при выполнении программы.

Следующий код служит примером лениво выделенного синглета:

public class Widget {
    private Widget singleton;

    public static Widget get() {
        if (singleton == null) {
            singleton = new Widget();
        }
        return singleton;
    }

    private Widget() {
        // ...
    }

    // ...
}

Обратите внимание, что этот код не является потокобезопасным. В большинстве случаев доступ к методу get() должен быть синхронизирован определенным образом.

Аналогичное (и, возможно, более общее) понятие ленивая инициализация.