在运行时设置JVM堆大小


问题内容

有没有办法从正在运行的Java程序中设置堆大小?


问题答案:

没有。

对于具有非常多的堆需求的应用程序,您可以做的是设置最大的堆大小-Xmx并进行调整-XX:MaxHeapFreeRatio-XX:MinHeapFreeRatio以使堆缩小时该应用程序不会挂在大量内存上(使用默认设置即可) )。

但是请注意,当应用程序实际使用的内存变化剧烈且快速时,这可能会导致性能问题-在这种情况下,最好将其挂在所有内存上,而不是仅将其退还给操作系统以声明使用它再过一秒钟。您可能还想弄弄GC选项,以确保GC不会在周围留下过多的无人认领的对象,当堆有很大的增长空间时,GC往往会这样做,这会破坏目标希望堆大小能够适应应用程序的需求。