我对 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)