什么是惰性分配?

24 浏览
0 Comments

什么是惰性分配?

什么是对象的惰性分配,它有什么用处?

0
0 Comments

什么是延迟分配(Lazy Allocation)?延迟分配指的是直到实际需要时才分配资源。这在单例对象中很常见,严格来说,只要资源尽可能地延迟分配,就可以看作是延迟分配的例子。

通过延迟分配资源直到实际需要时,可以减少启动时间,甚至在实际上不使用该对象时完全避免分配。相比之下,如果事先分配一个预计将来需要的资源,虽然可以使后续执行更高效,但会增加启动时间,并且避免了在程序执行的后期可能出现的分配失败的情况。

下面的代码提供了一个延迟分配的单例对象的示例:

public class Widget {
    private Widget singleton;
    public static Widget get() {
        if (singleton == null) {
            singleton = new Widget();
        }
        return singleton;
    }
    private Widget() {
        // ...
    }
    // ...
}

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

类似的(或者更一般性的)概念是延迟初始化(lazy initialization)。

“late objects”和“lazy init”这两个术语是否是同义词?就像本文标题中的Java How to Program: Late Objects Version一样?我在谷歌上搜索了一下,但除了这本书以外找不到其他参考资料。

根据搜索结果来看,Deitel出版社有两个版本的这本书,一个是使用“late objects”(延迟对象)的版本,其中最初的章节以过程式风格编写(后来再引入类/对象),另一个是使用“early objects”(早期对象)的版本,其中立即引入类/对象。他们使用“late objects”和“early objects”来区分这两种教学风格,与延迟初始化没有任何关系。

0