Java应用程序使用系统中的最大可用内存

Java应用程序使用系统中的最大可用内存,java,jvm,jnlp,Java,Jvm,Jnlp,有-Xmx和最大堆大小(jnlp)选项来设置java应用程序可以使用的最大内存。 如果未指定这些选项,则允许应用程序仅使用系统中的少量可用物理内存。 这就是人们使用-Xmx来允许应用程序使用更多内存的原因。但这对我来说确实是一场噩梦,因为客户端机器上可能有不同数量的内存,甚至操作系统也应该考虑在内 有没有办法让java应用程序在系统中使用最大的可用内存 谢谢。不幸的是,我知道的最好的方法是编写一个简单的启动器(可能是一个shell脚本或批处理文件),用于检查系统,确定-Xmx的适当值,然后启动J

有-Xmx和最大堆大小(jnlp)选项来设置java应用程序可以使用的最大内存。
如果未指定这些选项,则允许应用程序仅使用系统中的少量可用物理内存。
这就是人们使用-Xmx来允许应用程序使用更多内存的原因。但这对我来说确实是一场噩梦,因为客户端机器上可能有不同数量的内存,甚至操作系统也应该考虑在内

有没有办法让java应用程序在系统中使用最大的可用内存


谢谢。

不幸的是,我知道的最好的方法是编写一个简单的启动器(可能是一个shell脚本或批处理文件),用于检查系统,确定-Xmx的适当值,然后启动Java应用程序。一旦JVM初始化,就不可能更改这些值

-XX:DefaultMaxRAMFraction=1



不适用于web start

您在-Xmx中放入的任何内存都将被JVM占用并且在退出之前不会被释放,这是正确的吗?因为那样的话,你可能会消耗大量内存…@Miquel:不,那是
-Xms
,初始堆大小
-Xmx
是最大堆大小。一旦JVM获得内存,它就不会释放内存。有一些技术上的情况争论反对这一点,但实际上这些情况从未发生过,所以分配给堆的内存保持分配状态。这并不意味着主机操作系统不能交换它,但这是一个完全不同的问题。