如何查找Java + JNI + c++进程中的内存泄漏
How to Find memory leaks in Java + JNI + C++ process
我有一个用java编写的项目,使用JNI使用c++库。所有的代码都是我们写的,所以我有所有的源代码。
几个小时后,机器内存耗尽,尽管我的进程只是迭代文件和所有关于前一个文件删除的内存。
我确定存在内存泄漏,通常我使用Valgrind,但似乎他不能很好地应对Java,并认为JVM正在泄漏,即使是"hello world"Java项目。
我用单元测试测试了c++部分(主要流程),并在单元测试中使用了valgrind,但没有发现任何泄漏。它不能证明任何东西,因为有很多我可能错过的潜在流动。
我的主要问题是,我怎样才能找到我的漏洞?
知道是谁在消耗内存,java还是本机,这将非常有帮助。他们在同一个过程中。
谢谢。
根据我的经验,Valgrind实际上可以与JVM一起使用,并且它仍然是查找C/c++代码漏洞的最佳工具,即使使用JNI也是如此。所以你的问题包含了你需要的答案;)
如果你不能同时使用JNI和Valgrind,请参考Valgrind和Java。
可以使用jemalloc调试本机内存泄漏。这篇博文有一个使用jemalloc调试java应用程序中的本机内存泄漏的详细示例。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 可以读入进程内存的最大块大小是多少?
- 枚举进程模块在有效句柄上返回无效句柄
- 如何读取特定地址的进程内存?
- 如何从另一个进程解开全局钩子?