我已经设置了Java应用程序运行时的Java虚拟机默认内存限制,就像这样...
我知道这将把最大内存分配池设置为128MB,但我不知道指定JVM内存限制的好处是什么?
请在这个问题上启迪我...
java -mx128m ClassName
我知道这将把最大内存分配池设置为128MB,但我不知道指定JVM内存限制的好处是什么?
请在这个问题上启迪我...
-Xmx
可以更改这个值。JVM会为堆大小定义一个默认限制。这个设置允许您覆盖它,通常是为了指定要分配给Java进程的更多内存。
关于Java和内存已经有一个问题 SO: Java memory explained
这里有一篇非常好的关于Java内存的文章 here。它概述了内存的使用、清理以及如何测量。
默认的内存设置(Java 6之前):
-Xms 字节大小 设置Java堆的初始大小。默认大小为2097152(2MB)。值必须是1024字节(1KB)的倍数且大于1024字节。 (-server标志将默认大小增加到32M。)
-Xmn 字节大小 设置Eden代的Java堆的初始大小。默认值为640K。 (-server标志将默认大小增加到2M。)
-Xmx 字节大小 设置Java堆可以增长到的最大大小。默认大小为64M。 (-server标志将默认大小增加到128M。)最大堆限制约为2GB(2048MB)。
另一个来源 (here) 表示,在Java 6中,默认堆大小取决于系统内存的数量。
我认为这应该有助于避免高内存消耗(由于错误或由于许多分配和释放)。如果您设计低内存系统(例如具有少量RAM的旧计算机,移动电话等),则可以使用此选项。
或者,如果默认内存限制不足以满足您的需求,并且您在正常行为中遇到OutOfMemoryException
,则可以使用此选项来增加内存限制。
Runtime.getRuntime().maxMemory();
来查找JVM正在使用的设置,否则请查阅您的JVM文档。我运行了man java
来查找我的机器上的默认值。 - krock