我有一个用java写的项目,使用JNI使用C++库。所有的代码都是我们写的,所以我有所有的源代码。
几个小时后,机器耗尽了内存,尽管我的进程只是迭代文件和所有关于先前删除的文件的内存。
我确定有一个内存泄漏,通常我使用Valgrind,但他似乎不能很好地处理Java,并认为JVM正在泄漏,即使是"hello world“java项目也是如此。
我已经用单元测试测试了C++部分(主要流程),并在单元测试中使用了valgrind,但没有发现任何泄漏。这并不能证明任何事情,因为我可能会错过许多潜在的流程。
我的主要问题是,我怎样才能找到我的漏洞?
知道谁在消耗内存是非常有帮助的,是java还是本机部分?它们处于相同的过程中。
谢谢。
发布于 2016-02-25 02:16:10
您可以使用jemalloc to debug native memory leaks。This blog post有一个使用jemalloc来调试java应用程序中本机内存泄漏的详细示例。
发布于 2015-11-01 02:47:13
根据我的经验,Valgrind实际上可以用于JVM,而且它仍然是查找C/C++代码中漏洞的最佳工具,即使使用JNI也是如此。所以你的问题包含了你需要的答案;)
如果您无法同时使用JNI和Valgrind,请参考Valgrind and Java。
https://stackoverflow.com/questions/33334126
复制相似问题