JNAByteBuffer无法释放并导致C堆内存不足

JNAByteBuffer无法释放并导致C堆内存不足,第1张

JNA / ByteBuffer无法释放并导致C堆内存不足

我认为您已正确诊断:您永远不会用完Java堆,因此JVM不会进行垃圾回收,并且不会释放映射的缓冲区。手动运行GC时没有问题的事实似乎证实了这一点。您还可以打开详细的收集日志记录作为辅助确认。

所以,你可以做什么?好吧,我首先要尝试使用-
Xms命令行参数将初始JVM堆大小保持较小。如果您的程序不断在Java堆上分配少量内存,则可能会导致问题,因为它会更频繁地运行GC。

我还将使用 pmap
工具(或Windows上的任何等效工具)来检查虚拟内存映射。您可能会通过分配可变大小的缓冲区来碎片化C堆。如果真是这样,那么您会看到每张更大的虚拟地图,其中“
anon”块之间存在间隙。解决方案是分配大于所需大小的恒定大小的块。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5600673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存