最佳答案
您需要一个可以执行 JVM allocation profiling 操作的工具.
Java Flight Recorder (JFR) 可以帮助您进行低开销分配分析( 1 、 2 — 旧版本的文档,UI 现在看起来完全不同,但“Allocations”和“TLAB”仍然是这些词用来找东西)。确保分配分析 is enabled在您使用的设置中。在 OpenJDK 11 之前,这是一项商业功能。他们说,现在其他一些工具也可以以较低的开销实现这一点(例如 async-profiler )。
如果您不关心您的应用程序变得慢得无法使用并且使用的是 JDK < 11(?),VisualVM 过去能够向您显示分配的堆栈跟踪。我在最新版本(目前为 1.4.2)中找不到它,但可以在我的 Oracle JDK 8 附带的 JVisualVM 中找到它。 “探查器”> 检查“设置”>“内存设置”> 检查“记录分配堆栈跟踪”。开始分析,等待,等待,等待,确定最大的分配,右键单击“拍摄快照并显示分配堆栈跟踪”。它看起来像 YourKit does basically the same ,以及 JProfiler(他们称之为“分配记录”)。再次强调:会大大降低应用程序的速度,因此不要在产品中使用它。
关于Java,如何找出哪个类或方法使用了大量内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54209349/