用于lambda表达式的Java堆转储分析

Pav*_*mar 5 java lambda profiling heap-dump java-8

我的Java应用程序堆转储显示,我的类中使用的特定lambda已锁定了一定数量的内存,并且在GC期间未释放该内存。

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

用DJ反编译类文件无济于事,因为它会将lambda表达式重新创建为可读代码。让我知道是否有任何想法。

在此处输入图片说明

Bri*_*etz 5

尝试定义系统属性

jdk.internal.lambda.dumpProxyClasses=/path/to/dir
Run Code Online (Sandbox Code Playgroud)

调用JVM时。这将导致运行时将动态生成的lambda类写入磁盘,您可以在其中检查它们javap。这将使您能够看到它们包含哪些字段(捕获的变量)以及lambda对应的lambda主体方法。