Xmx是java的一个选项,用来设置你的应用程序能够使用的最大内存数(看好,致使你的应用程序,不是整个jvm),如果你的程序要花很大内存的话,那就需要修改缺省的设置,比如配置tomcat的时候,如果流量啊程序啊都很大的话就需要加大这个值了,不过有一点是要记住的,不要大得超过你的机器的内存,那样你的机器会受不了的,到时候就死翘翘了。
Xms是另一个设置内存的参数,用它来设置程序初始化的时候内存栈的大小,增加这个值的话你的程序的启动性能会得到提高。不过同样有前面的限制,以及受到xmx的限制。
不同的虚拟机的实现虽然千差万别,但是他们的运行模式都是一样的,只是性能有所不同罢了。
虚拟机只是一个软件实现,它是一个在内存中的机器,而我们机器上装的是jre,是为了生成这个jvm用的。通常来说,每次运行一个application都会生成一个jvm,但是也可以有多个程序在同一个jvm里面。
JVM的堆的内存, 是通过上面两个参数控制的
-Xms 最小堆的大小, 也就是当你的虚拟机启动后, 就会分配这么大的堆内存给你
-Xmx 是最大堆的大小
当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象,那么就会扩展堆,如果-Xmx设置的太小,扩展堆就会失败,导致OutOfMemoryError错误提示。 所以配置最好接近。
实际上,细节不止于此, 堆还会被分成几个不同的区域,分别应用不同的GC算法
最好看看 Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine