在运行时设置JVM堆大小

fei*_*oox 60 java heap jvm runtime

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

Mic*_*rdt 60

没有.

你能与具有非常可变堆需求的应用做的是设置你的最大堆大小非常高,-Xmx和调整-XX:MaxHeapFreeRatio,并-XX:MinHeapFreeRatio使得当堆收缩的应用程序不会挂到了大量的内存(它是使用默认设置).

但请注意,当应用程序实际使用的内存强烈而快速地变化时,这可能会导致性能问题 - 在这种情况下,最好将其挂在所有内存上,而不是仅仅将其返回到操作系统才能声明它再过一秒钟.您可能还想调整GC选项,以确保GC不会留下太多无人认领的物体,当堆有很大的空间来生长时,它往往会这样做,这会破坏目标希望堆大小适应应用程序的需要.


thS*_*oft 13

根据http://www.dreamincode.net/forums/showtopic96263.htm,您无法在运行时执行此操作,但可以使用不同的堆大小生成另一个进程.


And*_*are 7

您可以在启动应用程序时调整这些设置,但是一旦JVM启动并运行,这些值就无法更改.像这样的东西:

java -Xms32m -Xmx512m FooBar

将最小堆大小设置为32MB,最大堆大小设置为512MB.设置完成后,您无法在正在运行的程序中更改它们.