当前位置:编程学习 > JAVA >>

java堆为什么要固定?最近看了jvm书籍

-Xms -Xmx 固定为一样即可避免堆自动扩展?

为什么要固定起来呢?有什么好处,这样就可避免内存溢出 --------------------编程问答-------------------- 动态扩展会造成额外的垃圾收集,
假设现在设置了Xmx2g
那么下面两种情况:
1.不设置Xms,默认最大是64M,
2.设置了Xms2g

假设在你已经用了40M内存,这个时候再申请30M,
在情况1:发现内存不够了(当前最大64)-->gc-->发现需要扩展-->可以扩展(因为Xmx2g)-->扩展
在情况2:因为当前最大就是2g,情况1发生的情况2都不会发生
--------------------编程问答-------------------- 一般软件业貌似是不会设置最大使用内存限制的,如果它需要,会无限制申请,直到系统无可给予。所以-Xmx的存在我觉得作用不是很明显(可能对系统其它并行使用的软件有好处),如果设置得小了,还会导致out of memory。


而-Xms貌似有好处,如果不设置,jvm可能会持续申请所需内存,影响性能,而-Xms存在,就一笔申请,要胜过持续申请。


--------------------编程问答-------------------- 除 --------------------编程问答-------------------- -Xmx的大小是需要设置的。要不会用默认的。

-Xms和-Xmx的大小设置为一样的,是一种错误的行为。

内存溢出,对于写的不好的代码是无法避免的。 --------------------编程问答--------------------
引用 1 楼 wapigzhu 的回复:
动态扩展会造成额外的垃圾收集,
假设现在设置了Xmx2g
那么下面两种情况:
1.不设置Xms,默认最大是64M,
2.设置了Xms2g

假设在你已经用了40M内存,这个时候再申请30M,
在情况1:发现内存不够了(当前最大64)-->gc-->发现需要扩展-->可以扩展(因为Xmx2g)-->扩展
在情况2:因为当前最大就是2g,情况1发生的情况2都不……


谢谢你 --------------------编程问答--------------------
引用 2 楼 dracularking 的回复:
一般软件业貌似是不会设置最大使用内存限制的,如果它需要,会无限制申请,直到系统无可给予。所以-Xmx的存在我觉得作用不是很明显(可能对系统其它并行使用的软件有好处),如果设置得小了,还会导致out of memory。


而-Xms貌似有好处,如果不设置,jvm可能会持续申请所需内存,影响性能,而-Xms存在,就一笔申请,要胜过持续申请。


谢谢 --------------------编程问答-------------------- 堆大小设置上下限会导致堆大小是变化的,当使用的内存减少时,就导致jvm需要耗费额外的资源来处理内存碎片,缩小堆大小;当需要内存加多时,jvm又要新开辟内存
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,