可能的重复:
在运行时设置 JVM 堆大小以
编程方式设置最大 Java 堆大小
我在我的计算机上运行了一个长期运行的 Java 作业,当它接近尾声时它的速度非常慢,因为它遇到了严重的内存压力并且垃圾收集器必须频繁运行。换句话说,我低估了-Xmx
这项工作所需的最大堆大小。
由于我不想重新启动作业,有没有办法让 JVM 在 JVM 已经启动后更改它的最大堆大小,例如使用jinfo -flag
或类似的东西?这可能吗?
我一直在尝试使用jinfo -flag +Xmx1024m
or的变体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)