2015-11-24 22 views
0

以及我在blog中发现了这段代码,并且想知道它为什么会导致内存泄漏,如果它可能导致内存泄漏。可以java 8 lambda导致内存泄漏?

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); 
     }; 
    } 
} 
+0

你有这个博客的链接? – dube

+1

添加链接@dube – prasun

+0

我不太确定垃圾收集如何在java中工作,所以任何帮助将是伟大的:) – prasun

回答

5

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

但是,该代码中没有任何内容会阻止Runnable最终被收集,并且此时所有额外状态都将符合收集条件。

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