Java引數-Xms和-Xmx的區別

liuhaimiao發表於2014-09-26
  java記憶體堆疊不夠用時我們會尋求java引數-Xms和-Xmx的幫助,網上也有許多前輩給出了例子,但很多人喜歡把-Xms和-Xmx的值設定成一樣的,甚至我還見過有吧-Xms設的比-Xmx還要大(-Xms是最小值,-Xmx是最大值)。
    一開始我也不知道這兩個值設成一樣會有什麼問題,但是我在作專案 時發現,當我把-Xms和-Xmx設定成一樣時,java會不斷地吃記憶體。起先不知道怎麼回事,經過測試後發現,原來java的垃圾回收器在記憶體使用達到-Xms值的時候才會開始回收,如果兩個值一樣,那就意味著,只有當java使用完所有記憶體時才會回收垃圾,這樣一來記憶體當然不停的漲。希望我的教訓對各位有所幫助。
一般設定為
-Xms128m
-Xmx512m 
以前只知道最大值於最小值,今天知道最小值於垃圾回收的原理了。受教了。 
不同廠家的jdk垃圾回收演算法不一樣,不能一概而論 
針對不同應用切換到最合適的GC演算法好了.

如果是1.6的jdk, CMS回收演算法有很大的增強
詳見
不單是垃圾收集,vm會根據空餘記憶體,在xms和xmx之間調整記憶體,所以會耗時 
補充,並且同一jdk的gc策略也有多種,不能一概而論
另外,在sun的jdk下,Xms和Xmx設定一樣,可以減輕伸縮堆大小帶來的壓力,但在ibm的jdk下面,設定為一樣會增大堆碎片產生的機率,並且這種負面影響足以抵消前者產生的益處  






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/223653/viewspace-1281858/,如需轉載,請註明出處,否則將追究法律責任。

相關文章