java.lang.OutOfMemoryError - 關(guān)于java的內(nèi)存溢出

          java.lang.OutOfMemoryError: PermGen space
          PermGen space的全稱是Permanent Generation space
          是指內(nèi)存的永久保存區(qū)域, 該區(qū)域被JVM用來存放Class和Meta信息, 該區(qū)域默認(rèn)大小約是4M,并且JVM圾圾回收機(jī)不會(huì)在運(yùn)行期對(duì)該區(qū)域進(jìn)行清理.隨著應(yīng)用載入的class越來越多(這些class包括所有來自lib包中引入的jar), 當(dāng)該區(qū)域不夠用時(shí),將拋出PermGen space錯(cuò)誤,這個(gè)時(shí)候就應(yīng)該手動(dòng)設(shè)置Perm Size的值, 如: JAVA_OPTS='-XX:PermSize=64m -XX:MaxPermSize=128m', 這個(gè)錯(cuò)誤經(jīng)常發(fā)生在應(yīng)用啟動(dòng)時(shí),如tomcat中運(yùn)行過多應(yīng)用,并且每個(gè)應(yīng)用都包含相當(dāng)多的lib包時(shí),就可能發(fā)生該錯(cuò)誤,因?yàn)槊總€(gè)應(yīng)用lib包中的class載入時(shí)都會(huì)占用該區(qū)域一定的內(nèi)存,即使這些應(yīng)用包含相同的jar,當(dāng)這些jar中的class載入時(shí)仍可能占用不同的內(nèi)存區(qū)域,所以調(diào)整PermSize大小就是一個(gè)選擇,另一個(gè)不錯(cuò)的辦法就是將應(yīng)用中相同的jar包移動(dòng)到tomcat的lib目錄中,這可以減少Perm區(qū)域的內(nèi)存占用.


          java.lang.OutOfMemoryError:Java heap space
          JVM堆的內(nèi)存區(qū)域,該區(qū)域是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū), 用于分配類的對(duì)象, 如我們new出來的實(shí)例對(duì)象.該區(qū)域可由運(yùn)行時(shí)垃圾回收機(jī)清理, JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。當(dāng)我們?cè)诔绦蜻\(yùn)行期間產(chǎn)生的實(shí)例對(duì)象越來越多,而這些對(duì)象又沒有得到及時(shí)清理時(shí), 直到這些對(duì)象占據(jù)到接近-Xmx的設(shè)置值時(shí)就會(huì)拋出該錯(cuò)誤. 
          舉個(gè)例子,如我們?cè)趙eb應(yīng)用的session中保存了太多信息(session保存于服務(wù)器內(nèi)存中),隨著用戶的增多,每個(gè)用戶都分別占用著一定的內(nèi)存,當(dāng)同時(shí)在線的用戶增加到一定程度時(shí),就可能拋出該內(nèi)存溢出錯(cuò)誤, 這個(gè)時(shí)候最直接的解決辦法就是設(shè)置-Xmx的大小(一般建議-Xms與-Xmx設(shè)置一樣大),另一個(gè)就是檢查你的session中是否存放了太多不必要的信息. 該錯(cuò)誤還經(jīng)常發(fā)生在很多后臺(tái)線程中,為了處理一些大數(shù)據(jù)量的東西,我們經(jīng)常會(huì)在系統(tǒng)中創(chuàng)建一些定時(shí)任務(wù),這些定時(shí)任務(wù)可能會(huì)較長時(shí)間占據(jù)著系統(tǒng)的大量內(nèi)存,隨著任務(wù)越來越多,這些線程就可能在不知不覺中引起內(nèi)存溢出錯(cuò)誤!


          - huliqing@huliqing.name
          - http://www.huliqing.name

          posted on 2013-08-10 23:43 huliqing 閱讀(2067) 評(píng)論(2)  編輯  收藏 所屬分類: Java

          評(píng)論

          # re: java.lang.OutOfMemoryError - 關(guān)于java的內(nèi)存溢出 2013-08-18 12:47 tb

          選擇64位系統(tǒng) 64位中間件  回復(fù)  更多評(píng)論   

          # re: java.lang.OutOfMemoryError - 關(guān)于java的內(nèi)存溢出[未登錄] 2013-09-09 17:28

          不錯(cuò),希望樓主再發(fā)表一片堆轉(zhuǎn)儲(chǔ)快照分析的案例,那個(gè)我實(shí)在不會(huì),這篇不錯(cuò),轉(zhuǎn)了  回復(fù)  更多評(píng)論   

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          文章原創(chuàng),歡迎轉(zhuǎn)載
          ——轉(zhuǎn)載請(qǐng)注明出處及原文鏈接

          隨筆分類(60)

          隨筆檔案(33)

          最新評(píng)論

          評(píng)論排行榜

          主站蜘蛛池模板: 纳雍县| 崇信县| 定襄县| 黑龙江省| 屯昌县| 南阳市| 洪泽县| 崇文区| 淮阳县| 福泉市| 阿尔山市| 丹巴县| 柳江县| 双城市| 沁源县| 淅川县| 呼玛县| 庆安县| 彭水| 汤原县| 邵武市| 河曲县| 板桥市| 文化| 鲜城| 延长县| 申扎县| 东兴市| 林西县| 油尖旺区| 东方市| 依安县| 成安县| 英德市| 天长市| 东兰县| 墨玉县| 东至县| 南雄市| 嘉黎县| 弥渡县|