什么是惰性分配?

24

“懒惰分配”对象是什么意思,它有什么用处?

1个回答

22

惰性分配指的是在实际需要时才分配资源。这种情况在单例对象中很常见,但严格来说,只要尽可能晚地分配资源,就可以看作是惰性分配的示例。

将资源的分配推迟到实际需要时可以减少启动时间,甚至可以完全避免分配,如果你从未使用该对象的话。与此相反,你可以预先分配一个你后来可能需要的资源,这可以使后续执行更加高效,但会增加启动时间,并避免了程序执行过程中可能出现的分配失败。

以下代码提供了一个惰性分配的单例示例:

public class Widget {
    private Widget singleton;

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

    private Widget() {
        // ...
    }

    // ...
}

请注意,此代码不是线程安全的。在大多数情况下,访问 get() 方法应该以某种方式进行同步。

一个类似(或者更一般)的概念是延迟初始化


“Late objects”和“lazy init”这两个术语是同义词吗?就像这篇文章的标题《Java编程入门:晚期对象版本》一样?我尝试过谷歌搜索,但除了这篇文章外没有找到其他相关参考资料。 - hydeph
1
@hydeph,看起来Deitel有两个版本的那本书,一个是“late objects”,其中最初的章节是以过程式风格编写的(稍后再介绍类/对象),另一个是“early objects”,其中类/对象会立即被介绍。他们使用“late objects”和“early objects”来区分这些教学风格,与延迟初始化没有任何关系。 - Derek Park

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接