Java8 lambda是否像匿名类一样维护对其封闭实例的引用?

Java8 lambda是否像匿名类一样维护对其封闭实例的引用?,lambda,java-8,retrolambda,Lambda,Java 8,Retrolambda,匿名类维护对其封闭实例的引用,这可能导致Android上的上下文泄漏 由于将lambdas向后移植到Java7,因此值得一试 java8lambdas没有这个问题,但是我找不到任何关于这个问题的官方信息 有线索吗 这里有一些信息 从以下链接: 这对内存管理有一个有益的启示:虽然内部类实例始终持有对其封闭实例的强引用,但不从封闭实例捕获成员的lambda不持有对其的引用。内部类实例的这种特性通常是内存泄漏的一个来源(所谓的失效侦听器问题) 你也可以看到 案文如下: 嵌套类:如果您的需求与本地类的需

匿名类维护对其封闭实例的引用,这可能导致Android上的上下文泄漏

由于将lambdas向后移植到Java7,因此值得一试

java8lambdas没有这个问题,但是我找不到任何关于这个问题的官方信息

有线索吗

这里有一些信息

从以下链接: 这对内存管理有一个有益的启示:虽然内部类实例始终持有对其封闭实例的强引用,但不从封闭实例捕获成员的lambda不持有对其的引用。内部类实例的这种特性通常是内存泄漏的一个来源(所谓的失效侦听器问题)

你也可以看到 案文如下: 嵌套类:如果您的需求与本地类的需求相似,您希望使该类型更广泛地可用,并且不需要访问本地变量或方法参数,请使用嵌套类


如果需要访问封闭实例的非公共字段和方法,请使用非静态嵌套类(或内部类)。如果不需要此访问,请使用静态嵌套类。

Lambda表达式和方法引用仅在需要时捕获对
的引用,即直接引用
或访问实例(非
静态
)成员时


当然,如果lambda表达式捕获局部变量的值,并且该值包含对
this
的引用,则意味着也要引用
this

您是在询问常规lambda还是由retrollambda生成的字节码?如果你问的是常规lambda,那么Retrolambda与这个问题有什么关系?据我所知,Retrolambda使用Java8生成字节码,答案可能对两者都有效。这正是我的想法。有参考资料吗?你可以阅读并遵循以下链接…