Java runtime.getruntime.exec内存问题

Java runtime.getruntime.exec内存问题,java,unix,Java,Unix,有人能推荐一种替代java的Runtime.getRuntime().exec函数的方法吗。我将unix命令作为参数传递给此函数,但它会导致内存问题。Runtime.getRuntime().exec派生一个新进程,其内存量与java进程占用的内存量完全相同,导致内存需求翻倍,这正是我不想要的。这是可选的,取决于操作系统。在Linux上,在真正需要之前,内存是“懒散”分配的。你寻找的关键词是“记忆过度使用”,这是一种可能出现的情况 阅读,或者学习更多。您可能已经禁用了Overmit行为,因此分叉

有人能推荐一种替代java的Runtime.getRuntime().exec函数的方法吗。我将unix命令作为参数传递给此函数,但它会导致内存问题。Runtime.getRuntime().exec派生一个新进程,其内存量与java进程占用的内存量完全相同,导致内存需求翻倍,这正是我不想要的。

这是可选的,取决于操作系统。在Linux上,在真正需要之前,内存是“懒散”分配的。你寻找的关键词是“记忆过度使用”,这是一种可能出现的情况


阅读,或者学习更多。您可能已经禁用了Overmit行为,因此分叉进程总是立即分配所有内存。

当进程像这样分叉时,它不会将内存加倍,而是将内存标记为写时复制。子进程不使用额外的内存,除了它使用的内存。“导致内存需求翻倍”:您有什么证据表明内存需求翻倍了?你有一些测量方法吗,或者只是你的假设?我对此表示怀疑。嗨,雷德瓦尔德,我说mem要求加倍是错误的。然而,在我进行了一些测试之后,我发现我可以在unix机器上使用-Xms3850m运行我最简单的java程序。但是,当我在java程序中放置一行“Runtime.getRuntime.exec(“test.sh”)”时,-Xms不能大于2500m,这意味着Runtime.getRuntime.exec消耗1350MB。由于test.sh是一个非常简单的脚本,所以当我在unix box上独立运行它时,只需要几mb。你能建议我如何引导我的java程序使用更少的内存而不是1350MB吗?感谢Raj Alam,您找到问题的答案了吗?我们有没有办法引导Java在运行Runtime.Exec()命令时不分配相同的内存?您好。我的说法是错误的,mem需求翻了一番,但是它确实显著增加了(在我的例子中是1300mb)。在我进行了一些测试之后,我发现我可以在unix机器上用-Xms3850m运行我最简单的java程序。然而,当我在java程序中放置一行“Runtime.getRuntime.exec(“test.sh”)”时,-Xms不能大于2500m,这意味着Runtime.getRuntime.exec消耗1350MB。由于test.sh是一个非常简单的脚本,所以当我在unix box上独立运行它时,只需要几mb。你能建议我如何引导我的java程序使用更少的内存而不是1350MB吗?谢谢Daniel,Overmit的链接非常有意义。但是,我无法使用它。请指导我如何设置它。我不知道你的操作系统,版本等,但如果它是linux,你可以使用sysctl和它的配套配置文件来控制它。