可能重复:
Setting JVM heap size at runtime
programatically setting max java heap size
我的计算机上运行了一个长时间运行的Java作业,当它接近尾声时,它的速度正在慢慢下降,因为它遇到了严重的内存压力而且垃圾收集器必须经常运行。换句话说,我低估了这项工作所需的最大堆大小-Xmx
。
由于我不想重新启动作业,有没有办法让JVM在JVM启动后更改它的最大堆大小,例如使用jinfo -flag
或类似的东西?这可能吗?
我一直在尝试jinfo -flag +Xmx1024m
或jinfo -flag Xmx=1024m
上的变体,它们都给我以下异常。这是Debian bug #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)
答案 0 :(得分:2)
由于我不想重新启动作业,有没有办法让JVM在JVM启动后更改它的最大堆大小,例如使用jinfo -flag或类似的东西?这可能吗?
没有。这不可能。或者至少,不在任何平台上使用任何现有的Sun JVM。
有关详细信息,请参阅上述评论中相关问题的答案。
这是Debian bug#532538的症状吗?
没有