+-
java-与c和JNI共享内存分配
我正在用 Java为C程序编写包装.包装使用SWIG完成.我有以下问题:当我从Java调用在C中创建一个大对象的函数时,Java没有“看到”它分配了很多内存,因为它没有在Java堆中分配.问题是,当从Java端删除对象时,没有调用垃圾收集器,因为有足够的可用内存.我已经尝试实现以下内容: http://www.swig.org/Doc1.3/Java.html#java_heap_allocations.这个想法是为Java堆中的C分配内存空间.由于我不希望对每个新功能都使用该功能,因此我已重命名了该新功能,并在需要时从我的C代码中删除并明确使用它们.

这种机制似乎有效(我可以看到Java的堆是由垃圾收集器增长和收缩的),但是不幸的是,在memcpy期间似乎发生了随机崩溃.

如果我手动调用垃圾收集器,则我的程序正在运行,但这不是一个很干净的方法.

感谢您提供任何线索.

最佳答案
实际上,我在swig网站上没有注意到以下内容:

If you are going to use optimisations turned on with gcc (for example -O2), ensure you also compile with -fno-strict-aliasing

这似乎已经解决了问题

点击查看更多相关文章

转载注明原文:java-与c和JNI共享内存分配 - 乐贴网