如何查找Java + JNI + c++进程中的内存泄漏

How to Find memory leaks in Java + JNI + C++ process

本文关键字:进程 c++ 泄漏 内存 JNI 查找 Java 何查找      更新时间:2023-10-16

我有一个用java编写的项目,使用JNI使用c++库。所有的代码都是我们写的,所以我有所有的源代码。

几个小时后,机器内存耗尽,尽管我的进程只是迭代文件和所有关于前一个文件删除的内存。

我确定存在内存泄漏,通常我使用Valgrind,但似乎他不能很好地应对Java,并认为JVM正在泄漏,即使是"hello world"Java项目。

我用单元测试测试了c++部分(主要流程),并在单元测试中使用了valgrind,但没有发现任何泄漏。它不能证明任何东西,因为有很多我可能错过的潜在流动。

我的主要问题是,我怎样才能找到我的漏洞?

知道是谁在消耗内存,java还是本机,这将非常有帮助。他们在同一个过程中。

谢谢。

根据我的经验,Valgrind实际上可以与JVM一起使用,并且它仍然是查找C/c++代码漏洞的最佳工具,即使使用JNI也是如此。所以你的问题包含了你需要的答案;)

如果你不能同时使用JNI和Valgrind,请参考Valgrind和Java。

可以使用jemalloc调试本机内存泄漏。这篇博文有一个使用jemalloc调试java应用程序中的本机内存泄漏的详细示例。