我有在Tomcat容器中运行的Web应用程序。我被要求调查使用Valgrind来检测内存泄漏。是否可以使用Valgrind来分析Java Web应用程序?如果是,它是否是现有/内置JVM内存分析器的可行选项?我已经运行了JConsole和VisualVM来查看是否有任何内存泄漏并发现没有这样的泄漏。
根据我迄今为止的调查,我发现Valgrind适用于C / C ++应用程序和带有本机代码的Java应用程序(通过JNI)。
虽然在Valgrind网站上提到Valgrind可以用于用任何编程语言编写的程序,但我找不到任何Valgrind用于Java程序的例子。
由于
答案 0 :(得分:1)
我真的不认为你可以使用Valgrind for Java。 Valgrind检测到的内存泄漏只是:你分配了一些内容并忘了释放它。在Java中,没有free
,所以没有什么可忘记的......
有回收的其他资源(文件描述符,直接缓冲区等),但Valgrind并不知道它们。有办法导致内存泄漏,但它们通常涉及一个类加载器,即Valgrind一无所知。
Valgrind检测到的内存泄漏类型在Java中是不可能的(JNI除外)。
答案 1 :(得分:1)
valgrind运行几乎所有生成的代码。来了一点java但是做了这个工作。确保在调试内存泄漏时使用--smc-check = all选项。
通常在任何目标机器上调试c二进制文件,
$ valgrind --tool = memcheck NAME-OF-BINARY-FILE
显示堆摘要,泄漏摘要
的统计信息类似地,你可以使用附加的--smc-check = all选项为java做。