Man*_*lva 64 java jvm-arguments
看完已经问到的关于这个问题的问题和大量的谷歌搜索我仍然无法清楚地看到-Xms选项
我的问题是:java -Xms=512m -Xmx=512m和之间的区别是什么java -Xms=64m -Xmx=512m?
现在我有以下答案:
唯一的区别在于在我的应用程序运行期间将运行的垃圾收集的数量和内存分配的数量.我对吗 ?
以下是我回答这个问题的原因:
将-Xms选项设置为512m不会导致我的应用程序512M在启动后使用真正的物理内存.我想这与现代操作系统虚拟内存管理和延迟页面分配有关.(我注意到设置-Xms为512M或者64M不会改变Linux上的top或Windows上的任务管理器报告的所有初始使用内存)
有人可以帮助我理解这个Xms选项的影响,还是指向可以帮助我理解它的链接?
提前致谢
马努
Ste*_* B. 35
JVM将从初始堆级别的内存使用开始.如果maxheap更高,它将增长到maxheap大小,因为内存要求超过了它的当前内存.
所以,
JVM以512 M开始,从不调整大小.
如果mem,JVM以64M开始,增长(最大上限为512).要求超过64.
Tur*_*smo 34
总结链接后找到的信息:JVM分配-Xms指定的数量,但操作系统通常不需要分配实际页面.因此,JVM按照Xms的指定分配虚拟内存,但只根据需要分配物理内存.
您可以通过Sysinternals使用Process Explorer而不是Windows上的任务管理器来查看此信息.
因此,使用-Xms64M和-Xms512M之间存在真正的区别.但我认为最重要的区别是你已经指出的那个:如果你真的需要512MB而垃圾收集器会更频繁地运行,但只开始使用64MB.
JVM自适应地调整堆大小,这意味着它将尝试为您的应用程序找到最佳堆大小.-Xms和-Xmx只是指定JVM可以操作的范围并调整堆的大小.如果-Xms和-Xmx的值相同,那么JVM的堆大小将保持不变.
通常最好只设置-Xmx并让JVM找到最佳的堆大小,除非有一个特定的原因,你需要在JVM启动时给JVM一个大堆.
就JVM实际从OS请求内存而言,我认为这取决于JVM的平台和实现.我想在你的应用实际需要之前它不会请求内存.-Xmx和-Xms只保留内存.
| 归档时间: |
|
| 查看次数: |
186341 次 |
| 最近记录: |