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)
提供的代码没有内存泄漏,并且从中绘制它的博客条目没有另外说明.它所说的是返回的对象EnterpriseBean.runnable()具有比你可能天真期望的更多(更多)更大的状态,并且该状态在它Runnable自身之前不能被垃圾收集.
但是,该代码中没有任何内容可以防止Runnable最终被收集,并且此时所有额外状态也将有资格收集.
所以不,代码不是内存泄漏的一个例子,也没有提出生成内存泄漏的方法.