我的Java应用程序堆转储显示我的类中使用的特定lambda锁定了一些内存并且在GC期间没有释放它。
Heap将特定的匿名lambda类显示为 ParentClass $$ Lambda $ ID ,在当前情况下,ID为79(附加图像)。这个ID似乎与类中存在的lambda的数量没有任何关系,因此我们不能断定表示哪个lambda。我有兴趣指出确切的lambda表达式,因为它有助于分析,修复和测试相关的场景。
使用DJ反编译类文件没有帮助,因为它将lambda表达式重新创建为可读代码。如果有任何想法,请告诉我。
答案 0 :(得分:5)
尝试定义系统属性
jdk.internal.lambda.dumpProxyClasses=/path/to/dir
调用JVM时。这将导致运行时将动态生成的lambda类写入磁盘,您可以使用javap
检查它们。这将使您能够查看它们保存的字段(捕获的变量)以及lambda对应的lambda body方法。