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

pra*_*sun 0 java lambda memory-leaks

好吧,我在博客中发现了这个代码,并想了解为什么它会导致内存泄漏,如果它可能导致内存泄漏.

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);
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 6

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

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

所以不,代码不是内存泄漏的一个例子,也没有提出生成内存泄漏的方法.