lambda表达式的Java堆转储分析

时间:2015-06-19 09:42:01

标签: java lambda profiling java-8 heap-dump

我的Java应用程序堆转储显示我的类中使用的特定lambda锁定了一些内存并且在GC期间没有释放它。

Heap将特定的匿名lambda类显示为 ParentClass $$ Lambda $ ID ,在当前情况下,ID为79(附加图像)。这个ID似乎与类中存在的lambda的数量没有任何关系,因此我们不能断定表示哪个lambda。我有兴趣指出确切的lambda表达式,因为它有助于分析,修复和测试相关的场景。

使用DJ反编译类文件没有帮助,因为它将lambda表达式重新创建为可读代码。如果有任何想法,请告诉我。

enter image description here

1 个答案:

答案 0 :(得分:5)

尝试定义系统属性

jdk.internal.lambda.dumpProxyClasses=/path/to/dir

调用JVM时。这将导致运行时将动态生成的lambda类写入磁盘,您可以使用javap检查它们。这将使您能够查看它们保存的字段(捕获的变量)以及lambda对应的lambda body方法。