Java,如何找出哪个类或方法使用了大量内存?

标签 java jvm

enter image description here

这是我的 Java 项目的一日内存曲线。如何找出哪个类或方法使用了大量内存?

最佳答案

您需要一个可以执行 JVM allocation profiling 操作的工具.

Java Flight Recorder (JFR) 可以帮助您进行低开销分配分析( 12 — 旧版本的文档,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/

相关文章:

java - 在 Java 中将十进制度或度分秒转换为米

java - 如何在不影响Tomcat重新部署的情况下替换已编译jar中的文件

amazon-web-services - 在 ec2 上从 docker 运行 elasticsearch

java - 如何在 DllMain 调用中维护 JVM 指针并防止调用 JNI_CreateJavaVM 两次

java - Math.round() 方法的奇怪行为

java - 简单的 Java 同步块(synchronized block)可以抛出异常吗?

java - 无法从我的数据库中获取信息

java - 更改 PDF 旋转文本的字体

java - JVM 数组可以被 realloc() 吗?

java - 已检测到内存泄漏但无法理解确切原因,因为 hashmap 条目令人困惑?