这是我的 Java 项目的一日内存曲线。如何找出哪个类或方法使用了大量内存?
你需要一个可以做到的工具JVM 分配分析 https://www.google.com/search?q=jvm%20allocation%20profiling.
Java Flight Recorder (JFR) 可以帮助您进行低开销分配分析(1 https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/memleaks001.html, 2 http://hirt.se/blog/?p=381— 对于旧版本的文档,UI 现在看起来完全不同,但“分配”和“TLAB”仍然是用于查找内容的词)。确保分配分析已启用 https://stackoverflow.com/questions/19056826/java-mission-control-heap-profile在您使用的设置中。在 OpenJDK 11 之前,这是一个商业功能。他们说,现在其他一些工具也可以以较低的开销实现这一点(例如异步分析器 https://github.com/jvm-profiling-tools/async-profiler).
如果您不关心您的应用程序变得慢得无法使用并且使用的是 JDK 检查“设置”>“内存设置”> 检查“记录分配堆栈跟踪”。开始分析,等待,等待,等待,确定最大的分配,右键单击“拍摄快照并显示分配堆栈跟踪”。看起来像你的套件基本上是一样的 https://www.yourkit.com/docs/java/help/allocations.jsp,以及 JProfiler(他们称之为“分配记录”)。再次强调:会大大减慢应用程序的速度,所以不要在产品中使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)