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 楼答案
所提供的代码没有内存泄漏,从中提取代码的博客条目也没有这样说。它说的是,由
EnterpriseBean.runnable()
返回的对象的状态比您天真地期望的大得多(远),并且在Runnable
本身被垃圾收集之前,不能对该状态进行垃圾收集然而,该代码中没有任何内容会阻止
Runnable
最终被收集,届时所有额外的状态也将有资格被收集因此,不,该代码不是内存泄漏的例子,也没有提出产生内存泄漏的方法