新聞中心
小編給大家分享一下java中OOM內(nèi)存泄漏原因是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為鳳慶企業(yè)提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站設(shè)計,鳳慶網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
一、什么是OOM
OOM,全稱“Out Of Memory”,翻譯成中文就是“內(nèi)存用完了”,當(dāng)JVM因為沒有足夠的內(nèi)存來為對象分配空間并且垃圾回收器也已經(jīng)沒有空間可回收時,就會拋出這個error
二、為什么會OOM、出現(xiàn)的原因是什么
為什么會沒有內(nèi)存了呢?原因不外乎有兩點:
① 分配的少了:比如虛擬機(jī)本身可使用的內(nèi)存(一般通過啟動時的VM參數(shù)指定)太少。
② 應(yīng)用用的太多,并且用完沒釋放,浪費(fèi)了。此時就會造成內(nèi)存泄露或者內(nèi)存溢出。
三、解決辦法
① java.lang.OutOfMemoryError: Java heap space ——>java堆內(nèi)存溢出,此種情況最常見,一般由于內(nèi)存泄露或者堆的大小設(shè)置不當(dāng)引起。對于內(nèi)存泄露,需要通過內(nèi)存監(jiān)控軟件查找程序中的泄露代碼,而堆大小可以通過虛擬機(jī)參數(shù)-Xms,-Xmx等修改。
② java.lang.OutOfMemoryError: PermGen space ——>java永久代溢出,即方法區(qū)溢出了,一般出現(xiàn)于大量Class或者jsp頁面,或者采用cglib等反射機(jī)制的情況,因為上述情況會產(chǎn)生大量的Class信息存儲于方法區(qū)。此種情況可以通過更改方法區(qū)的大小來解決,使用類似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,過多的常量尤其是字符串也會導(dǎo)致方法區(qū)溢出。
③ java.lang.StackOverflowError ——> 不會拋OOM error,但也是比較常見的Java內(nèi)存溢出。JAVA虛擬機(jī)棧溢出,一般是由于程序中存在死循環(huán)或者深度遞歸調(diào)用造成的,棧大小設(shè)置太小也會出現(xiàn)此種溢出??梢酝ㄟ^虛擬機(jī)參數(shù)-Xss來設(shè)置棧的大小
以上是“java中OOM內(nèi)存泄漏原因是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前題目:java中OOM內(nèi)存泄漏原因是什么
當(dāng)前URL:http://fisionsoft.com.cn/article/ihpjhi.html