如何在 Java 任务控制的内存视图中解释 lambda

How to interpret lambda in memory view of Java Mission Control

我正在使用 Java Mission Control 分析 Java 8 应用程序的一部分。我正在使用 Java Mission Control 6.0.0(Java 9 和 10 附带的版本)。在内存视图中,在 Java 应用程序下,我看到以下内容:

87M 似乎是 lambda 的大量内存,尤其是在其他地方使用内存的上下文中。我应该如何解释并优化 lambda 的这种内存使用?

您可能想对这个数字持保留态度,飞行记录器对内存分配进行了采样。我认为以字节为单位显示总数会产生误导,因为不存在这种准确性。显示"allocation pressure"的百分比会更好。

您可以使用 table 大致了解大部分分配发生的位置,至少如果您有几百个样本。这类似于 Hot Methods table,显示 JVM 执行最多的 Java 代码,但不显示方法已执行的毫秒数。

如果您想删除不必要的分配,我会查看堆栈跟踪,看看您是否可以在那里做些什么。