java lang OutOfMemoryError: Java堆空間
最後,通過檢查數據可知,這是由於JVM堆內存不足造成的。JVM通常在啟動時設置JVM堆的值。
初始空間(Xms)是物理內存/最大空間(Xmx)不能超過JVM中的物理內存。如果%的時間花在GC上,而可用堆的大小小於%,就會拋出這個異常消息。這個問題可以通過修改JVM堆大小來解決。
諸如
單擊(此處)折疊或打開。
java Xms M Xmx M className
JVM初始化堆內存設置為m以上,最大可用堆內存為m。
()命令行中設置的方法如上所述。
()您可以在Eclipse中進行設置。
在eclipse的運行>運行配置>中參數下vmArguments中的設置。
Xms M Xmx M
此外,您可以使用java X查看其他JVM參數。
單擊(此處)折疊或打開。
d:\ work & gt;java X
Xmixed混合模式執行(默認)
僅解釋模式執行
xbootclasspath:& lt;目錄和zip/jar文件用;& gt
為引導類和資源設置搜索路徑
xbootclasspath/a:& lt;目錄和zip/jar文件用;& gt
追加到引導類路徑的末尾
xbootclasspath/p:& lt;目錄和zip/jar文件用;& gt
在引導類路徑前添加前綴
Xnoclassgc禁用類垃圾收集
Xincgc啟用增量垃圾收集
xloggc:& lt;文件& gt將GC狀態記錄到帶有時間戳的文件中
Xbatch禁用後臺填充
Xms & ltsize & gt設置初始Java堆大小
Xmx & ltsize & gt設置最大Java堆大小
Xss & ltsize & gt設置java線程堆棧大小
Xprof輸出cpu分析數據
Xfuture啟用預測未來違約的最嚴格檢查
Xrs減少了Java/VM對OS信號的使用(參見文檔)
Xcheck:jni對jni函數執行額外的檢查
Xshare:off不要試圖使用共享類數據
Xshare:如果可能,自動使用共享類數據(默認)
Xshare:on要求使用共享類數據,否則會失敗
X選項是非標準的,如有更改,恕不另行通知
可以通過java lang Runtime的壹些方法來檢查jvm的內存使用情況。
單擊(此處)折疊或打開。
系統輸出println(總內存:+Runtime get Runtime()Total Memory()/(*+MB)
系統輸出println(可用內存:+Runtime get Runtime()Free Memory()/(*)+MB)
系統輸出println(最大內存:+Runtime get Runtime()maxMemory()/(*)+MB)
maxMemory()方法返回java虛擬機(這個進程)可以從操作系統中獲取的最大內存,以字節為單位。
totalMemory()的方法返回java虛擬機現在已經從操作系統挖來的內存大小,也就是當時java虛擬機占用的所有內存。
FreeMemory是當前jvm中未使用的內存。
附jvm參數描述(轉自)
服務器:壹定要把它作為第壹個參數,在多個CPU上取得好的性能。
默認情況下,Xms java堆的初始大小是/
Xmx java堆的最大值建議設置為物理內存的壹半,不能超過物理內存。
XX:PermSize:設置內存永久存儲區的初始大小。默認值是m(我用visualvm exe查過了)。
XX:MaxPermSize:設置內存永久存儲區的最大大小。默認值是m(我用visualvm exe查過了)。
XX:SurvivorRatio=?幸存者池的默認大小是,如果垃圾收集成為瓶頸,您可以嘗試自定義生成池設置。
XX:NewSize:新生成的池的初始大小的默認值是m。
XX:MaxNewSize:新生成的池的最大大小默認值為m。
如果JVM的堆大小大於GB,您應該使用值xx:new size = mxx:max new size = mxx:survivor ratio =或將總堆大小的%到%分配給新生成的池,以調整新的對象區域,從而減少完全GC次數。
+XX:AggressiveHeap會讓Xms失去意義。這個參數讓jvm忽略Xmx參數,瘋狂吃掉壹個G物理內存,然後壹個G交換。
每個線程的Xss棧大小Xss這使得JBoss每增加壹個線程就要立刻消耗M內存,而最佳值應該是K,默認值好像是K。
Verbose:gc實際垃圾收集信息
Xloggc:gc log指定垃圾收集日誌文件。
Xmn年輕壹代的堆大小壹般設置為Xmx的三分之壹。
XX:+UseParNewGC縮短了minor收集的時間。
XX:+UseConcMarkSweepGC縮短了專業的采集時間。當堆的大小很大並且major的收集時間很長時,這個選項更適合。
XX:userParNewGC可以用來設置多個CPU的並行集合。
Xx:並行可以用來增加並行度。多CPU。
Lishi Xinzhi/Article/program/Java/hx/201311/26103