Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          java.lang.OutOfMemoryError: Java heap space 解決方法

          本博客一搬家,新家地址: http://www.javaly.cn (Java樂園)
          java.lang.OutOfMemoryError: Java heap space 解決方法
          這個問題的根源是jvm虛擬機的默認Heap大小是64M,可以通過設置其最大和最小值來實現.設置的方法主要是幾個.
          1.可以在windows 更改系統環境變量
          加上JAVA_OPTS=-Xms64m -Xmx512m
          2,如果用的tomcat,在windows下,可以在
          C:\tomcat5.5.9\bin\catalina.bat  中加上:
          set JAVA_OPTS=-Xms64m -Xmx256m
          位置在: rem Guess CATALINA_HOME if not defined  這行的下面加合適.
          3.如果是linux系統
          Linux  在{tomcat_home}/bin/catalina.sh的前面,加
          set JAVA_OPTS='-Xms64 -Xmx512'






          ################################################################

          內存溢出 java.lang.OutOfMemoryError: Java heap space


          有三種可能導致OutOfMemoryError。首先是,此JVM有真實的內存泄漏,導致此JVM堆在內部實現時產生了一個Bug。這極不可靠。所有JVM都經過充分的測試,并且,如果有人發現這種bug,它將絕對是最高的優先級。因此你可以非常寬心地排除這種可能性。

             第二種可能的OutOfMemoryError原因只不過是,你沒有為你的應用程序運行時給予足夠多的可用內存。這種情況,有兩種可能的方案,或者增加 JVM堆可用大小,或者減少你的應用程序所需的內存總量。提高JVM可用堆大小可以簡單的使用JVM的 -Xmx 參數。假如你將此參數設置盡可能的大(可用內存極限不要超過系統物理內存,否則你的應用程序將分頁并暫停),仍然有以上所提到的內存問題,那么,你需要減 少你的應用程序所可能用到內存總量。減少應用程序內存可能是簡單的,你可能允許一些集合過大,例如使用了許多大的緩沖區。或者它過于復雜,要求你重新實現 一些類,乃至重新設計應用程序。

             讀者 Jams Stauffer 指出有些JVM(例如 sun的 JVMs),還有一個“Perm”參數用來處理JVM結構與類對象。如果你正在使用一個數量非常巨大的類集,它有可能運行在"Perm"空間之外,然后你 需要增加此空間的大小,例如,sun的JVM使用 -XX:PermSize 與 -XX:MaxPermSize 選項。

             第三種導致OutOfMemoryError最為常見,無心的對象引用保持。你沒有明確無誤的釋放對象,以致于你的堆增長再增長,直到你沒有額外的空間。

             處理OutOfMemoryError:

             是JVM內部的BUG?不太可能。如果是,這是優先級最高的BUG(為什么還沒有人發現它,而你碰到了?)。

             沒有足夠的內存分配給實際運行的應用程序?兩種選擇:使用-Xmx參數增加堆的最大使用內存(或者使用-XX:MaxPermSize參數增加Perm空 間大?。? 或者使用更小的集合/緩沖區/表空間/對象.....,以減少所需要的內存總量,也就是說,可以調整對象大小,重新設計與重新實現你的應用程 序。

          無心的對象引用保持?找到保持這些無意引用的源對象,改變它并釋放這些對象。在IBM開發者社區的文章綱要式的揭示了這樣一個通用的處理過程。這個過程主 要是等到應用程序到達恒定狀態--你將期望最多的新創建的對象是臨時對象,并且可以被垃圾收集器收集。這常常是在應用程序所有的初始化工作完成之后。

          強迫垃圾收集,獲得一個堆的對象快照。
          做任何工作可能正在導到無意的對象引用保持。
          強迫另一次垃圾收集并獲得第二次堆的對象快照。
          比較這兩個快照,觀察從第一個快照到第二個快照哪些對象在數量上有所增加。因為你在快照之前強迫垃圾收集,剩下的將是所有被應用程序引用的對象,比較兩個快照將準確的標識那些新創建的、保留在應用程序里的對象。
          根據你對應用程序的認識,決定兩個快照比較中,哪些對象正在無意的保持對象引用。
          跟蹤前導引用,找到哪些對象正在引用這些無意的保持對象,直到你找到導致此問題的源對象

          啟動虛擬機的時候,加上一個參數:-Xms800m -Xmx800m就好了
          -Xms <size>
          設置JVM初始化堆內存大小

          -Xmx <size>
          設置JVM最大的堆內存大小

          如果是應用程序,則:java -Xms800m -Xmx800m 你的類名
          如果是tomcat之類的web服務器,在這個服務器的啟動文件后面加上這個參數即可。

          Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
                  at org.jaxen.expr.IdentitySet.contains(IdentitySet.java:73)
                  at org.jaxen.expr.DefaultStep.evaluate(DefaultStep.java:165)
                  at org.jaxen.expr.DefaultLocationPath.evaluate(DefaultLocationPath.java:
          154)
                  at org.jaxen.expr.DefaultAbsoluteLocationPath.evaluate(DefaultAbsoluteLo
          cationPath.java:117)
                  at org.jaxen.expr.DefaultXPathExpr.asList(DefaultXPathExpr.java:108)
                  at org.jaxen.BaseXPath.selectNodesForContext(BaseXPath.java:705)
                  at org.jaxen.BaseXPath.selectNodes(BaseXPath.java:227)
                  at org.dom4j.xpath.DefaultXPath.selectNodes(DefaultXPath.java:132)
                  at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:166)
                  at com.sunland.jdata.Pm01XmlFactory.readSourceData(Pm01XmlFactory.java:1
          20)
                  at com.sunland.jdata.Pm01XmlFactory.readSourceDataDir(Pm01XmlFactory.jav
          a:95)
                  at com.sunland.operation.Pm01DbBean.done(Pm01DbBean.java:28)
                  at com.sunland.factory.Pm01Task.doCreate(Pm01Task.java:44)
                  at com.sunland.factory.Pm01Task.run(Pm01Task.java:31)
                  at com.sunland.jdata.MainStart.main(MainStart.java:69)

          posted on 2009-05-21 10:44 找個美女做老婆 閱讀(2275) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 潞西市| 桐梓县| 肇源县| 舒城县| 太仆寺旗| 麦盖提县| 巴青县| 双鸭山市| 连江县| 赤水市| 临夏县| 融水| 榆中县| 云南省| 金堂县| 洪湖市| 休宁县| 芷江| 大姚县| 唐河县| 长春市| 蒙自县| 岱山县| 阿鲁科尔沁旗| 嘉荫县| 白玉县| 襄垣县| 孝感市| 宽城| 太仆寺旗| 筠连县| 甘南县| 武山县| 富锦市| 繁昌县| 武穴市| 临朐县| 潼南县| 恩平市| 陆河县| 全南县|