posts - 297,  comments - 1618,  trackbacks - 0
          java.lang.OutOfMemoryError這個(gè)錯(cuò)誤我相信大部分開發(fā)人員都有遇到過(guò),產(chǎn)生該錯(cuò)誤的原因大都出于以下原因:JVM內(nèi)存過(guò)小、程序不嚴(yán)密,產(chǎn)生了過(guò)多的垃圾。

          ???????????在一年多的工作過(guò)程中,遇到該問(wèn)題的印象最深有兩次。

          ?????????? 一次是用hibernate查詢數(shù)據(jù)時(shí),一次查詢過(guò)多的數(shù)據(jù),例如30000條,此時(shí)程序出錯(cuò),該死的java.lang.OutMemoryError,后來(lái)調(diào)整了該部分的代碼,每次只取出指定量的數(shù)據(jù),成功的解決該問(wèn)題。

          ??????????? 還有一次是當(dāng)測(cè)試人員loadRunner做壓力測(cè)試時(shí),并發(fā)200個(gè)用戶時(shí),運(yùn)行不到幾分鐘整個(gè)weblogic都癱掉,真夠狠的,又是java.lang.OutOfMemoryError, PM叫我檢查同事寫的代碼,折騰了我好久,結(jié)果發(fā)現(xiàn)原來(lái)是由于session的資源一直沒(méi)有被釋放產(chǎn)生的,真把俺給氣死!!!在該工程中在web.xml文件中設(shè)置了一個(gè)session的偵聽期,當(dāng)檢測(cè)到session超時(shí)時(shí),進(jìn)入指定的類進(jìn)行相應(yīng)處理,而該同事在進(jìn)行了自定義的處理后,沒(méi)有通過(guò)session的invalidate()方法將session的資源釋放,導(dǎo)致當(dāng)大批量并發(fā)時(shí),造成內(nèi)存溢出。

          ??????????? 解決java.lang.OutOfMemoryError的方法有如下幾種:

          1. 增加jvm的內(nèi)存大小。方法有:

          ??????????? 1)在執(zhí)行某個(gè)class文件時(shí)候,可以使用java?-Xmx256M?aa.class來(lái)設(shè)置運(yùn)行aa.class時(shí)jvm所允許占用的最大內(nèi)存為256M。
          ??????????? 2)對(duì)tomcat容器,可以在啟動(dòng)時(shí)對(duì)jvm設(shè)置內(nèi)存限度。對(duì)tomcat,可以在catalina.bat中添加:
          ?"set?CATALINA_OPTS=-Xms128M?-Xmx256M
          ??set?JAVA_OPTS=-Xms128M?-Xmx256M",或者把%CATALINA_OPTS%和%JAVA_OPTS%代替為-Xms128M?-Xmx256M

          ??????????? 3)對(duì)resin容器,同樣可以在啟動(dòng)時(shí)對(duì)jvm設(shè)置內(nèi)存限度。在bin文件夾下創(chuàng)建一個(gè)startup.bat文件,內(nèi)容如下:
          ???????????????? @echo?off
          ????????????????? call?"httpd.exe"??"-Xms128M"?"-Xmx256M"
          ??????????????????:end?
          ??????????????????其中"-Xms128M"為最小內(nèi)存,"-Xmx256M"為最大內(nèi)存。

          ?? 2.??? 優(yōu)化程序,釋放垃圾。

          ??????? 主要包括避免死循環(huán),應(yīng)該及時(shí)釋放種資源:內(nèi)存,?數(shù)據(jù)庫(kù)的各種連接,防止一次載入太多的數(shù)據(jù)。導(dǎo)致java.lang.OutOfMemoryError的根本原因是程序不健壯。因此,從根本上解決Java內(nèi)存溢出的唯一方法就是修改程序,及時(shí)地釋放沒(méi)用的對(duì)象,釋放內(nèi)存空間。?遇到該錯(cuò)誤的時(shí)候要仔細(xì)檢查程序,嘿嘿,遇多一次這種問(wèn)題之后,以后寫程序就會(huì)小心多了。

          posted on 2007-02-11 23:35 阿蜜果 閱讀(36558) 評(píng)論(11)  編輯  收藏 所屬分類: Java


          FeedBack:
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2007-02-12 10:36 | 獅子心
          呵呵,我也遇到過(guò)類似的問(wèn)題,有一次是處理大文本,就是試圖使用java分析日志,結(jié)果outofmemmory。。。后來(lái)使用awk,價(jià)格便宜量又足。  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2007-03-14 21:44 | 陳朋奕
          呵呵,同意,awk/gawk或者是sed在Linux下的處理速度和效率都是相當(dāng)高的。Java還是比較耗機(jī)器性能的。
          PS:windows下好像也有個(gè)awk,沒(méi)用過(guò),不知道效果如何?  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2007-05-17 10:45 | 鴻雁于飛
          我們的系統(tǒng)剛上線,經(jīng)常因java.lang.OutOfMemoryError把jboss弄得死掉。  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2007-09-24 20:59 | maleung
          “導(dǎo)致java.lang.OutOfMemoryError的根本原因是程序不健壯。”
          很欣賞這句話,但是個(gè)人覺(jué)得太難了,就像是我們無(wú)法完全消除bugs一樣。
          為了博主的這句話而努力,代碼要寫的漂亮。  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記 [未登錄](méi)
          2008-11-10 10:17 | king
          不錯(cuò),學(xué)習(xí)了.  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2008-12-16 16:21 | wangts
          所描述的幾種原因是比較好處理的,但好像有更多的原因。
          “導(dǎo)致java.lang.OutOfMemoryError的根本原因是程序不健壯”
          在java里有點(diǎn)工作經(jīng)驗(yàn)的程序員很難寫出不釋放內(nèi)存的代碼。
          只要不搞全局,不搞靜態(tài),這些低級(jí)的錯(cuò)誤。  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2009-02-01 13:52 | arron
          支持下 我也碰到這樣的問(wèn)題 報(bào)表從html轉(zhuǎn)到excel中100頁(yè)也沒(méi)有問(wèn)題 100多點(diǎn) 就開始報(bào)這個(gè)異常了!!  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2009-03-18 09:02 | littlemouse
          非常感謝!增加jvm的內(nèi)存大小有效果.  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記 [未登錄](méi)
          2009-07-22 19:35 | 啊啊
          @wangts
          只要不搞全局,不搞靜態(tài),這些低級(jí)的錯(cuò)誤" 什么意思
          是不用這些就會(huì)沒(méi)問(wèn)題了嗎
            回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記 [未登錄](méi)
          2009-08-20 00:37 |
          支持,!  回復(fù)  更多評(píng)論
            
          # re: java.lang.OutOfMemoryError學(xué)習(xí)筆記
          2009-09-17 11:42 | 柱子
          剛學(xué)JAVA不久,就出現(xiàn)這個(gè)問(wèn)題
          我在2G內(nèi)存機(jī)器上沒(méi)問(wèn)題,在512內(nèi)存機(jī)器就出現(xiàn)問(wèn)題了
          我試試,謝謝  回復(fù)  更多評(píng)論
            
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

                生活將我們磨圓,是為了讓我們滾得更遠(yuǎn)——“圓”來(lái)如此。
                我的作品:
                玩轉(zhuǎn)Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實(shí)戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊(cè)

          關(guān)注blog

          積分與排名

          • 積分 - 2296370
          • 排名 - 3

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 武强县| 东乌珠穆沁旗| 新闻| 陆丰市| 中西区| 根河市| 天气| 伊金霍洛旗| 那曲县| 巨鹿县| 辉南县| 新干县| 阳山县| 南召县| 五指山市| 三台县| 纳雍县| 枝江市| 汨罗市| 昭平县| 莱西市| 辽阳县| 尼木县| 武冈市| 通化市| 密云县| 贵定县| 亳州市| 徐水县| 政和县| 手游| 祥云县| 西乌珠穆沁旗| 镇康县| 嵊泗县| 安义县| 禹城市| 宁德市| 丰城市| 重庆市| 青海省|