我在运行Java Application时设置了Java虚拟机的默认内存限制,如下所示......
java -mx128m ClassName
Run Code Online (Sandbox Code Playgroud)
我知道这会将最大内存分配池设置为128MB,但我不知道有什么好处,指定JVM的内存限制?
请在这个问题上赐教我...
在Sun的1.6 JVM上,在服务器级机器上(意味着具有2个CPU和至少2GB的物理内存),默认的最大堆大小是物理内存的1/4或1GB中的较小者.使用-Xmx让你改变它.
为什么要限制Java使用的内存量?两个原因.
首先,Java的自动内存管理倾向于从操作系统中获取尽可能多的内存,然后为了程序的利益进行管理.如果你在与Java程序相同的机器上运行其他程序,那么它将获得超过其公平份额的内存,从而给它们带来压力.如果您正在运行Java程序的多个副本,它们将相互竞争,并且您可能最终会遇到一些缺乏内存的实例.对堆大小设置上限可让您管理 - 如果您有32 GB的RAM,并且正在运行四个进程,则可以将每个堆限制为大约8 GB(稍微好一些),并确信它们都将全部获得适量的内存.
其次(第一个真正的另一个方面),如果一个进程占用的内存超过操作系统可以从物理内存提供的内存,它就会使用虚拟内存,它会被分页到磁盘.这很慢.Java可以通过使垃圾收集器更加努力来减少其内存使用量.这也很慢 - 但不像转到磁盘那么慢.因此,您可以限制堆大小以避免Java进程被分页,从而提高性能.