java - 对于一小段代码来说,延迟初始化值得吗?

标签 java memory-management lazy-initialization

我有单例A.classRunnable loadTask 可能会被唤起,也可能不会,这就是我考虑延迟初始化的原因。我担心内存使用情况。所以问题是延迟初始化是否值得实现?或者函数体消耗的内存比即时初始化的内存多一点,并且更容易忽略内存消耗差异。

我知道函数的定义必须在某处消耗内存

附注据我所知,函数体的内存不是在堆中分配的。

附注Instrumentation.class、sizeOf、Runtime.freeMemory() 仅适用于类字段/属性。

class A_LazyInit {
    Runnable loadTask;
    void load() {
        if(loadTask == null) loadTask = new Runnable() {
            public void run() {
                loadFileFromInternet();
            }
        };
        new Thread(loadTask).start();
    }
    void useMethod() {
        if(isGoodCondition()) load();
    }
}

对比

class A {
    Runnable loadTask = new Runnable() {
        public void run() {
            loadFileFromInternet();
        }
    };
    void useMethod() {
        if(isGoodCondition()) new Thread(loadTask).start();
    }
}

最佳答案

这里您不会通过延迟初始化来节省任何内存。无论您是否急切地初始化代码,代码的内存都会被保留(它是在类加载时分配的)。

由于初始化 loadTask 变量不会花费很长时间,因此在任何情况下使用延迟初始化都不会给您带来优势。

关于java - 对于一小段代码来说,延迟初始化值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912405/

相关文章:

objective-c - 延迟初始化不起作用 iPhone

Python 类成员延迟初始化

java - Jena RDF API编写方法

ruby - 为什么内存中的值与我的 ruby​​ 程序中的值不同?

java - 如何在android运行时切换布局?

c# - 查找内存泄漏

c - UNIX 中的 SIZE 命令

hibernate - Hibernate.initialize 有什么作用?

java - 如何使用 REST 服务处理客户端-服务器应用程序中的错误?

java - 使用 jclouds API 仅更新 SoftLayer 中对象的元数据