【发布时间】:2009-10-12 09:44:19
【问题描述】:
我正在编写一个创建 JVM 并需要控制由 JVM 生成的进程的内存使用的应用程序。
【问题讨论】:
-
“控制”是什么意思?请详细说明
-
进程分配的确切内存?还是堆的 -Xmx 足够好?
标签: java memory controls process native
我正在编写一个创建 JVM 并需要控制由 JVM 生成的进程的内存使用的应用程序。
【问题讨论】:
标签: java memory controls process native
您可以使用 JMX 连接到 JVM 进程以获取有关内存状态/分配的信息并引发垃圾收集。但您首先需要启用 JVM 的 JMX 监控:http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html。
【讨论】:
我假设您说的是使用 Runtime.exec(...) 等生成的非 Java“进程”。
答案是这是特定于操作系统的,而不是标准 Java 库支持的东西。但是,如果您要在 Linux(或 UNIX)中执行此操作,我可以想到三种方法:
ulimit 内置来减少内存限制,然后 execs 实际命令;见man 1 ulimit。Process 和 ProcessBuilder 的行为,这可能非常困难。【讨论】:
如果“控制”是指“限制到已知上限”,那么您可以简单地通过
-Xms`lower_bound`
和
-Xmx`upper_bound`
当你生成进程时到 vm 的参数。 see the approproate setting here
【讨论】: