java内存溢出xms xmx

java内存堆栈不够用时我们会寻求java参数-Xms和-Xmx的帮助,网上也有许多前辈给出了例子,但很多人喜欢把-Xms和-Xmx的值设置成一样的,甚至我还见过有吧-Xms设的比-Xmx还要大(-Xms是最小值,-Xmx是最大值)。

    一开始我也不知道这两个值设成一样会有什么问题,但是我在作项目http://youmonitor.us/ 时发现,当我把-Xms和-Xmx设置成一样时,Java会不断地吃内存。起先不知道怎么回事,经过测试后发现,原来java的垃圾回收器在内存使用达到-Xms值的时候才会开始回收,如果两个值一样,那就意味着,只有当java使用完所有内存时才会回收垃圾,这样一来内存当然不停的涨。

并且同一jdk的gc策略也有多种,不能一概而论
另外,在sun的jdk下,Xms和Xmx设置一样,可以减轻伸缩堆大小带来的压力,但在ibm的jdk下面,设置为一样会增大堆碎片产生的几率,并且这种负面影响足以抵消前者产生的益处 

原文地址:https://www.cnblogs.com/liqing1009/p/9202200.html