1

可能的重复:
在运行时设置 JVM 堆大小以
编程方式设置最大 Java 堆大小

我在我的计算机上运行了一个长期运行的 Java 作业,当它接近尾声时它的速度非常慢,因为它遇到了严重的内存压力并且垃圾收集器必须频繁运行。换句话说,我低估了-Xmx这项工作所需的最大堆大小。

由于我不想重新启动作业,有没有办法让 JVM 在 JVM 已经启动后更改它的最大堆大小,例如使用jinfo -flag或类似的东西?这可能吗?

我一直在尝试使用jinfo -flag +Xmx1024mor的变体jinfo -flag Xmx=1024m,它们都给了我以下例外。这是Debian 错误 #532538的症状(我正在使用受影响的 JVM 版本),还是这是预期的行为(-Xmx以后不可能更改),还是我提供的标志jinfo不正确?

Exception in thread "main" java.io.IOException: Command failed in target VM
    at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:218)
    at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:213)
    at sun.tools.attach.HotSpotVirtualMachine.setFlag(HotSpotVirtualMachine.java:190)
    at sun.tools.jinfo.JInfo.flag(JInfo.java:129)
    at sun.tools.jinfo.JInfo.main(JInfo.java:76)
4

1 回答 1

2

由于我不想重新启动作业,有没有办法让 JVM 在 JVM 已经启动后更改它的最大堆大小,例如使用 jinfo -flag 或类似的东西?这可能吗?

不,这是不可能的。或者至少,没有任何平台上的任何现有 Sun JVM。

有关更多详细信息,请参阅上述评论中相关问题的答案。

这是 Debian 错误 #532538 的症状吗?

不。

于 2011-02-02T02:22:19.373 回答