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

时间:2015-10-25 19:31:49

标签: java c++ memory memory-leaks java-native-interface

我用java编写的项目使用JNI使用C ++库。 所有代码都是由我们编写的,所以我拥有所有源代码。

几个小时后,机器内存不足,尽管我的进程只是迭代文件并删除了有关上一个文件的所有内存。

我确信存在内存泄漏,通常我使用Valgrind,但似乎他无法很好地应对Java并且认为JVM正在泄漏,即使对于“hello world”java项目也是如此。

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

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

知道谁在消耗内存,java或本机部分会非常有帮助吗?他们在同一个过程中。

感谢。

2 个答案:

答案 0 :(得分:1)

根据我的经验,Valgrind实际上可用于JVM,它仍然是捕获C / C ++代码泄漏的最佳工具,即使使用JNI也是如此。所以你的问题包含了你需要的答案;)

如果您未能同时使用JNI和Valgrind,请参阅Valgrind and Java

答案 1 :(得分:1)

您可以jemalloc使用debug native memory leaksThis blog post有一个使用jemalloc调试java应用程序中的本机内存泄漏的详细示例。