动态设置java进程的最大堆大小

Pau*_*ers 3 java memory windows heap batch-file

我有一个由批处理文件启动的Java程序,其行如下所示:

javaw -Xms64m -Xmx1024m com.acme.MyProgram
Run Code Online (Sandbox Code Playgroud)

但是,在某些计算机上,程序将无法启动并显示以下消息:

无法为对象堆保留足够的空间.无法创建Java虚拟机.

问题似乎是内存分配池的最大大小比计算机可以处理的大.将内存分配池的最大大小从1024m减小到512m似乎可以解决问题.

有没有办法可以提前确定计算机上有多少可用内存(从批处理文件中),并确定是使用-Xmx1024m还是-Xmx512m在批处理文件中调用?请注意,此批处理文件只需要在Windows上运行.

Tho*_*nin 6

实际上Java VM已经做了类似的事情.如果未指定-Xms-Xmx,则从机器上的物理内存量推断出这些值.或者至少这样说过这个页面.

您可以将-Xms最小堆大小设置为使应用程序有用,并让Java确定适当的值-Xmx.