小编SvS*_*SvS的帖子

Java 8 lambda 闭包和 GC

我对 java 8 的“闭包”有点困惑。据说它会以高于价值的价格收盘。考虑下面的课程。

public class SomeClassWithLargeMemoryFootprint {
     //some state
     private SomeObject someObj;
     //some more state

     public void doSomething(SomeAsyncHelper helper) {
         helper.doAsync( () -> {
                             //some super slow operation
                             int foo = someObj.whatever();
                             //some more stuff    
                       });
     }
}
Run Code Online (Sandbox Code Playgroud)

//Let's assume SomeAsyncHelper.doAsync takes a VoidRunner that looks like below
interface VoidRunner {
    void apply();
}
Run Code Online (Sandbox Code Playgroud)

问题是,当异步助手仍在工作时,SomeClassWithLargeMemoryFootprint 的实例是否可以被 GC 处理?我很清楚“someObj”不能被 GC,因为 doSomething() 中的 lambda 需要它。该州其他地区怎么样?

另外,请考虑以下变体,我们调用包含类的成员方法:

public class SomeClassWithLargeMemoryFootprint {
     //some state
     private SomeObject someObj;
     //some more state

     public void …
Run Code Online (Sandbox Code Playgroud)

java lambda garbage-collection

5
推荐指数
1
解决办法
1289
查看次数

标签 统计

garbage-collection ×1

java ×1

lambda ×1