【发布时间】:2010-12-30 11:22:04
【问题描述】:
有人可以建议 java 的 Runtime.getRuntime().exec 函数的替代方法。我将一个 unix 命令作为参数传递给该函数,但它会导致内存问题。 Runtime.getRuntime().exec fork 一个新进程,其内存量与 java 进程占用的内存量完全相同,导致内存需求翻倍,这正是我不想要的。
【问题讨论】:
-
当一个进程像这样分叉时,它不会将内存加倍,而是将内存标记为写时复制。子进程不使用额外的内存,除了它使用的内存。
-
“导致内存需求翻倍”:你有什么证据表明内存需求翻了一番?你有一些测量,还是只是你的假设是这样的?我很怀疑。
-
嗨 Raedwald,我说 mem 要求翻倍是错误的。然而,在我进行了一些测试之后,我发现我可以在我的 unix 机器上运行带有 -Xms3850m 的最简单的 java 程序。但是,当我在我的 java 程序中添加一行“Runtime.getRuntime.exec("test.sh")”时,-Xms 不能大于 2500m,这意味着 Runtime.getRuntime.exec 正在消耗 1350 mb。由于 test.sh 是一个非常简单的脚本,当我在 unix box 上独立运行它时,它不会超过几 mb。您能否建议我如何引导我的 java 程序使用更少的内存而不是使用 1350 mb?谢谢
-
Meraj Alam,您找到问题的答案了吗,我们有没有办法指导 Java 在运行 Runtime.Exec() 命令时不分配相同的内存?。