lambda添加到类计数

时间:2018-05-09 14:27:02

标签: java lambda garbage-collection classloader

这么快的问题:

如果我有一个使用大量lambda表达式的程序,那么每个lambda是否创建了一个存储在metaspace中的新类?

通常情况下如果它存储在那里会很好,但是如果你还添加了java标志-Xnoclassgc,那么会产生泄漏,最终导致程序崩溃吗?

2 个答案:

答案 0 :(得分:1)

添加-Xnoclassgc标志并不会禁用整个Garbage Collector。它仅禁用Garbage Collector中的PermGen个类。

但是,在 JDK8 中,我们不再拥有PermGen,因为元数据现在已移至本地内存中的Metaspace区域。

另一方面,Java中的Lambda表达式是功能接口实例功能接口是一个只包含一个摘要的接口方法)。

换句话说,lambdas是 objects 并像处理其他对象一样处理并存储在堆上,因此编译器不会为每个lambda实例创建.class文件。 / p>

答案 1 :(得分:0)

简短的回答是否定的。

他们使用Java 7中引入的指令 - invokedynamic

您可以观看此演示文稿以获取更多信息 - https://www.infoq.com/presentations/lambda-invokedynamic