- 相關(guān)推薦
Java內存溢出的類(lèi)型
內存溢出通俗理解就是內存不夠,通常在運行大型軟件或游戲時(shí),軟件或游戲所需要的內存遠遠超出了你主機內安裝的內存所承受大小,就叫內存溢出。下面小編為大家整理了關(guān)于Java內存溢出的類(lèi)型,一起來(lái)看看吧:
1、java.lang.OutOfMemoryError:PermGenspace
JVM管理兩種類(lèi)型的Java內存,堆和非堆。堆是給開(kāi)發(fā)人員用的上面說(shuō)的就是,是在JVM啟動(dòng)時(shí)創(chuàng )建;非堆是留給JVM自己用的,用來(lái)存放類(lèi)的信息的。它和堆不同,運行期內GC不會(huì )釋放空間。如果webapp用了大量的第三方j(luò )ar或者應用有太多的class文件而恰好MaxPermSize設置較小,超出了也會(huì )導致這塊內存的占用過(guò)多造成Java內存溢出,或者tomcat熱部署時(shí)侯不會(huì )清理前面加載的環(huán)境,只會(huì )將context更改為新部署的,非堆存的內容就會(huì )越來(lái)越多。
PermGenspace的全稱(chēng)是PermanentGenerationspace,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì )被放到PermGenspace中,它和存放類(lèi)實(shí)例(Instance)的Heap區域不同,GC(GarbageCollection)不會(huì )在主程序運行期對PermGenspace進(jìn)行清理,所以如果你的應用中有很CLASS的話(huà),就很可能出現PermGenspace錯誤,這種錯誤常見(jiàn)在web服務(wù)器對JSP進(jìn)行precompile的時(shí)候。如果你的WEBAPP下都用了大量的第三方j(luò )ar,其大小超過(guò)了jvm默認的大小(4M)那么就會(huì )產(chǎn)生此錯誤信息了。
一個(gè)最佳的配置例子:(經(jīng)過(guò)驗證,自從用此配置之后,再未出現過(guò)tomcat死掉的情況)
setJAVA_OPTS=-Xms800m
-Xmx800m-XX:PermSize=128M
-XX:MaxNewSize=256m
-XX:MaxPermSize=256m
2、java.lang.OutOfMemoryError:Javaheapspace
再來(lái)看一下Java內存溢出的第二種情況,第一種情況是個(gè)補充,主要存在問(wèn)題就是出現在這個(gè)情況中。其默認空間(即-Xms)是物理內存的1/64,最大空間(-Xmx)是物理內存的1/4。如果內存剩余不到40%,JVM就會(huì )增大堆到Xmx設置的值,內存剩余超過(guò)70%,JVM就會(huì )減小堆到Xms設置的值。所以服務(wù)器的Xmx和Xms設置一般應該設置相同避免每次GC后都要調整虛擬機堆的大小。假設物理內存無(wú)限大,那么JVM內存的最大值跟操作系統有關(guān),一般32位機是1.5g到3g之間,而64位的就不會(huì )有限制了。
注意:如果Xms超過(guò)了Xmx值,或者堆最大值和非堆最大值的總和超過(guò)了物理內存或者操作系統的最大限制都會(huì )引起服務(wù)器啟動(dòng)不起來(lái)。
垃圾回收GC的角色
JVM調用GC的頻度還是很高的,主要兩種情況下進(jìn)行垃圾回收:
當應用程序線(xiàn)程空閑;另一個(gè)是java內存堆不足時(shí),會(huì )不斷調用GC,若連續回收都解決不了內存堆不足的問(wèn)題時(shí),就會(huì )報outofmemory錯誤。因為這個(gè)異常根據系統運行環(huán)境決定,所以無(wú)法預期它何時(shí)出現。根據GC的機制,程序的運行會(huì )引起系統運行環(huán)境的變化,增加GC的觸發(fā)機會(huì )。
為了避免這些問(wèn)題,程序的設計和編寫(xiě)就應避免垃圾對象的內存占用和GC的開(kāi)銷(xiāo)。顯示調用System.GC()只能建議JVM需要在內存中對垃圾對象進(jìn)行回收,但不是必須馬上回收,一個(gè)是并不能解決內存資源耗空的局面,另外也會(huì )增加GC的消耗。
【Java內存溢出的類(lèi)型】相關(guān)文章:
Java的內存劃分全解析12-17
筆記本內存接口類(lèi)型03-03
JAVA垃圾收集算法與內存泄露的解決方法12-04
java數據類(lèi)型和運算符03-06
Intel傲騰內存是內存還是固態(tài)硬盤(pán)03-18
電腦內存的作用03-17
內存故障分析03-05
如何診斷內存故障03-20
電腦內存插槽介紹03-06