Java openCL和崩溃,有没有更好的方法来发现内存泄漏?(约克)
我已经审核了我的openCL调用代码一段时间了,我找不到任何内存泄漏。注意,我使用的是JOCL,所以我有一系列JUnit测试。如果我单独运行我的任何测试,或者如果我运行我的任何测试的4/5,它总是通过,但是如果我在三个图形卡较弱的盒子中的一个上运行所有测试,它总是失败。我想这一定是内存泄漏问题。openCL刚刚被认为存在漏洞吗?有没有比在调试器中跟踪代码更好的方法来查找内存泄漏 我在我的盒子上发现了这个错误。如果我在JUnit测试中增加内存使用量,我也可以在更强的测试框中得到它,如果我把它设置得足够高,这是应该的。当这种情况发生在我较弱的盒子上时,如果在它之前运行了所有其他测试,那么它将在小于1MB的GPU内存测试中随机失败。我正在使用Nvidia的260.19.36驱动程序Java openCL和崩溃,有没有更好的方法来发现内存泄漏?(约克),java,memory-leaks,find,opencl,Java,Memory Leaks,Find,Opencl,我已经审核了我的openCL调用代码一段时间了,我找不到任何内存泄漏。注意,我使用的是JOCL,所以我有一系列JUnit测试。如果我单独运行我的任何测试,或者如果我运行我的任何测试的4/5,它总是通过,但是如果我在三个图形卡较弱的盒子中的一个上运行所有测试,它总是失败。我想这一定是内存泄漏问题。openCL刚刚被认为存在漏洞吗?有没有比在调试器中跟踪代码更好的方法来查找内存泄漏 我在我的盒子上发现了这个错误。如果我在JUnit测试中增加内存使用量,我也可以在更强的测试框中得到它,如果我把它设置得
[junit] CL_MEM_OBJECT_ALLOCATION_FAILURE
[junit] org.jocl.CLException: CL_MEM_OBJECT_ALLOCATION_FAILURE
当遇到内存泄漏时(无论项目中使用了什么框架),最好看几件事
- 您是否遇到了OutOfMemory异常?如果是,可能您没有一个-Xmin JMV变量集来告诉JVM从多少内存开始。如果一开始就太少,堆增长太快,实际上可能会使JVM崩溃。所以你可以试着玩这个
- 你知道你消耗了多少内存吗?您可以让应用程序转储当前内存使用情况或记录gc运行的次数。如果您的gc运行得非常高,那么您需要调整gc,或者可能存在泄漏
- 找到一个应用程序探查器(在我们的例子中,我们是一个沉重的IBM商店,所以我们使用他们的探查器,但我肯定有免费的)。如果怀疑存在泄漏,这可以帮助您在常规应用程序使用期间导航堆。它将精确地显示您正在使用多少堆,以及什么对象倾向于“交给”而不被清理
某些类在OpenCL设备上分配内存而不释放内存。您确定在抛出异常的情况下也会释放OpenCL内存吗?我觉得因为我使用的是GPU,所以我不知道如何应用这些可靠的技术。老实说,我希望我能在GPU上使用Valgrind,但我相信还没有这个功能……你确定你正确地释放了所有CL对象吗?你可以看一看,它在低级别api的基础上提供了一个高级别api,大大简化了使用,降低了泄漏风险。我相信我正在正确释放我的所有CL对象,但是代码中一定有什么地方出了问题。如果您确信您正在正确地发布所有内容,那么剩下的唯一因素就是CL实现中的错误或jocl.org中的错误。我们正在测试所有CL实现,从未遇到过这种情况(但我们使用jocl.jogamp.org)?你说撞车是什么意思?资源不足异常还是SEGFULTS?