我有一个使用本机库的Java进程。这个本地库非常耗费资源,并且会花费很多内存。此外,对于某些角落情况,它将完全占用我的所有记忆并完全冻结我的系统。
如果应用程序刚刚在那些奇怪的角落案件中崩溃,那将是件好事。但是如果可以抛出异常,那就更好了。有没有办法可以为这个JNI库的调用和子进程的执行指定内存限制?
我尝试在linux下使用ulimit -v但它没有用。理想情况下,我喜欢更便携的解决方案,因为该程序还必须在其他平台上运行。
答案 0 :(得分:1)
肯定没有便携式解决方案。当前进程和子进程限制资源使用只能由操作系统完成。这使得它必然是特定于平台且不可移植的。
你已经尝试过ulimit并且不适合你。 (我想这是因为每个进程的限制)另一个选择是Linux控制组(cgroups)。
无论哪种方式,ulimit
和cgroups
都是不可移植的,您可以在JVM之外设置或管理它们。
答案 1 :(得分:0)
JNI库已加载到JVM进程中,因此您无法仅对JNI部分应用特殊内存限制。只创建第二个进程就可以实现,但这需要主Java进程和第二个进程之间的进程间通信,这些进程是JNI的一部分。
然而,限制内存使用量是操作系统的一项工作 - 因此没有独立于平台的解决方案。
我看到解决此问题的唯一干净方法是修改库源(希望我们谈论的是一个开源库?)或者以限制内存使用的方式配置使用的库(如果它支持这个)