lambda 表达式的 Java 堆转储分析

标签 java lambda profiling java-8 heap-dump

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

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

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

enter image description here

最佳答案

尝试定义系统属性

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

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

关于lambda 表达式的 Java 堆转储分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30934890/

相关文章:

java - Spring Tomcat 启动问题 setCatalinaBase(Ljava/io/File;)

java - 没有为参数 [io.vertx.ext.unit.TestContext arg0] 注册 ParameterResolver

java - Maven 构建失败并出现错误 : Could not find artifact . .. 在指定的路径 - 路径稍微不正确

java - MainActivity 类型的层次结构不一致。为什么?

Java 8 - 在 CompleteableFuture 的 thenCompose 方法中处理元素列表

java - 如何使用 lambda 表达式调试 stream().map(...)?

java - 我可以使用 lambda 表达式通过 CDI 的策略模式动态获取 ejb 吗?

java - @Profile 与 @ConditionalOnProperty

c++ - Windows 任务管理器确定程序内存使用情况的可靠性如何?

ruby-on-rails - 如何在 Ruby on Rails 中分析请求?