有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java 8 Lambda会导致内存泄漏吗?

我在blog中发现了这段代码,我想了解它为什么会导致内存泄漏,如果它有可能导致内存泄漏的话

class Test {
    public static void main(String[] args) {
        Runnable runnable = new EnterpriseBean()
            .runnable();
        runnable.run(); // Breakpoint here
    }
}

@ImportantDeclaration
@NoMoreXML({
    @CoolNewValidationStuff("Annotations"),
    @CoolNewValidationStuff("Rock")
})
class EnterpriseBean {
    Object[] enterpriseStateObject = 
        new Object[100_000_000];

    Runnable runnable() {
        return () -> {
            System.out.println("Hello from: " + this);
        };
    }
}

共 (1) 个答案

  1. # 1 楼答案

    所提供的代码没有内存泄漏,从中提取代码的博客条目也没有这样说。它说的是,由EnterpriseBean.runnable()返回的对象的状态比您天真地期望的大得多(),并且在Runnable本身被垃圾收集之前,不能对该状态进行垃圾收集

    然而,该代码中没有任何内容会阻止Runnable最终被收集,届时所有额外的状态也将有资格被收集

    因此,不,该代码不是内存泄漏的例子,也没有提出产生内存泄漏的方法