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

时间:2015-11-24 14:53:28

标签: java memory-leaks 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 个答案:

答案 0 :(得分:5)

提供的代码没有内存泄漏,绘制它的博客条目没有说明。它说的是EnterpriseBean.runnable()返回的对象有很多(很多)大于你可能天真期望的状态,并且该状态不能在Runnable本身之前被垃圾收集是

但是,该代码中没有任何内容可以阻止最终收集Runnable,并且此时所有额外状态也将有资格收集。

所以不,代码不是内存泄漏的一个例子,也没有建议生成代码的方法。