【问题标题】:what is lazy allocation?什么是惰性分配?
【发布时间】:2009-04-03 05:45:35
【问题描述】:

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

【问题讨论】:

    标签: memory-management


    【解决方案1】:

    惰性分配只是意味着在实际需要之前不分配资源。这在单例对象中很常见,但严格来说,任何时候尽可能晚地分配资源,都有一个惰性分配的例子。

    通过延迟分配资源直到您真正需要它,您可以减少启动时间,如果您从未真正使用过该对象,甚至可以完全消除分配。相比之下,您可以预先分配您期望稍后需要的资源,这样可以以牺牲启动时间为代价提高以后的执行效率,并且还可以避免在程序执行后期分配失败的可能性。

    以下代码提供了延迟分配单例的示例:

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

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

    一个类似的(也许更普遍的)概念是lazy initialization

    【讨论】:

    • 是“晚期对象”和“惰性初始化”的同义词吗?正如本文的标题Java How to Program: Late Objects Version?我用谷歌搜索,但找不到该文本之外的任何参考。
    • @hydeph,看起来 Deitel 有这本书的两个版本,一个是“晚期对象”,其中最初的章节是程序式的(稍后会介绍类/对象),另一个是“早期的对象”,其中立即引入类/对象。他们使用“晚期对象”和“早期对象”来区分这些教学风格。它与延迟初始化没有任何关系。
    猜你喜欢
    • 2011-08-22
    • 2014-09-02
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2021-07-18
    相关资源
    最近更新 更多