0

我正在编写一个创建 JVM 并需要控制由 JVM 生成的进程的内存使用的应用程序。

4

3 回答 3

2

我假设您正在谈论使用Runtime.exec(...)etc生成的非 Java“进程”。

答案是这是特定于操作系统的,而不是标准 Java 库支持的东西。但是,如果您要在 Linux(或 UNIX)中执行此操作,我可以想到三种方法:

  • 让Java通过shell包装脚本生成命令,该脚本使用ulimit内置来减少内存限制,然后exec是实际命令;见man 1 ulimit
  • 编写一个与 shell 包装器相同的 C 小命令。这将比包装脚本方法具有更少的开销。
  • 尝试对 JNI 和本机代码库执行相同的操作。不推荐,因为您可能需要复制 and 的行为ProcessProcessBuilder这可能非常困难。
于 2009-10-12T11:24:01.170 回答
2

您可以使用 JMX 连接到 JVM 进程以获取有关内存状态/分配的信息并引发垃圾收集。但您首先需要启用 JVM 的 JMX 监控:http: //java.sun.com/j2se/1.5.0/docs/guide/management/agent.html

于 2009-10-12T10:17:43.803 回答
0

如果“控制”是指“限制为已知上限”,那么您可以简单地通过

-Xms`lower_bound` 

-Xmx`upper_bound` 

生成进程时到 vm 的 args。在此处查看适当的设置

于 2009-10-12T10:15:20.470 回答