在 Java 应用程序中分析内存使用情况的最佳方法?

2022-09-01 20:43:32

我意识到在SO之前已经有人问过类似的问题,但让我确切地描述一下我需要做什么:

我有一组运行命令行java应用程序的测试,我想向它们添加内存分析。我看到的一个选项是将代码(可能使用第三方工具/库)添加到我的应用程序中,以提供内存快照。另一种选择是使用第三方工具为我管理/检测我的应用程序和JVM(理想情况下不需要我更改代码)。我正在考虑像Valgrind这样的东西,但对于Java来说。如果可能的话,也可以开源。

我真正想做的是设置内存测试,以便定期监视我的内存使用情况,比如每秒,并将其转储到文本文件中。这样,我就可以看到内存使用量是否随着时间的推移而振荡/增加/减少。我还将能够计算最大和最小峰值。

这里有人做过这样的事情吗?

提前致谢。


答案 1

使用像JProfiler这样的东西,你需要做的就是向JVM添加某些参数。它使用JVMTI。

我认为您应该阅读分析器以及他们能为您做些什么。我还建议阅读JVMTI。

JVMTM 工具接口 (JVM TI) 是一种新的本机编程接口,供工具使用。它提供了一种检查状态和控制在 Java 虚拟机 (JVM) 中运行的应用程序的执行的方法。JVM TI 支持需要访问 JVM 状态的所有工具,包括但不限于:分析、调试、监控、线程分析和覆盖率分析工具。

注意:JVM TI 取代了 Java 虚拟机探查器接口 (JVMPI) 和 Java 虚拟机调试接口 (JVMDI)。JVMPI 和 JVMDI 将在 J2SETM 的下一个主要发行版中删除。


答案 2

Yourkit还有一个非常好的分析器


推荐