如何在Java + JNI + C ++进程中查找内存泄漏

40 浏览
0 Comments

如何在Java + JNI + C ++进程中查找内存泄漏

我有一个用Java编写的项目,使用JNI使用C++库。

所有代码都是由我们编写的,所以我拥有所有的源代码。

几个小时后,机器内存就耗尽了,尽管我的进程只是迭代文件,所有与先前文件相关的内存都被删除。

我确定有一些内存泄漏,通常我使用Valgrind,但它似乎无法很好地处理Java,并认为JVM发生了泄漏,即使对于“hello world”Java项目也是如此。

我已经对C++部分(主要流程)进行了单元测试,并在单元测试使用了valgrind,但找不到任何泄漏。这并不能证明什么,因为我可能错过了许多潜在的流程。

我最重要的问题是,我怎么找到我的泄露?

知道是Java还是本地部分在消耗内存,他们在同一个进程中,将非常有帮助。

谢谢。

admin 更改状态以发布 2023年5月19日
0
0 Comments

根据我的经验, Valgrind实际上可以与JVM一起使用, 以及仍然是在C/C++代码中寻找泄漏的最佳工具, 即使与JNI一起使用也可以。 所以, 你的问题有点包含了你需要的答案 😉

如果你使用JNI和Valgrind不能一起工作, 请参考Valgrind and Java

0
0 Comments

你可以使用 jemalloc调试本地内存泄漏这篇博客文章详细讲解了如何使用jemalloc来调试Java程序中的本地内存泄漏。

0