国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java.lang.OutOfMemoryError: Java heap space內(nèi)存不足問題

2019-11-06 06:06:42
字體:
供稿:網(wǎng)友

 

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space解決方法

問題描述Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

解決方案[轉(zhuǎn)]一直都知道可以設(shè)置jvm heap大小,一直用eclipse寫/調(diào)試java程序。一直用命令行or console加參數(shù)跑程序。現(xiàn)象:在eclipse的配置文件eclipse.ini中設(shè)置-vmargs -Xms500m -Xmx1024m, 在eclipse中直接run 或者debug某些耗內(nèi)存的程序時(shí)依然出現(xiàn)java.lang.OutOfMemoryError: Java Heap Space錯(cuò)誤,即通常認(rèn)為的內(nèi)存不足,java虛擬機(jī)內(nèi)存不夠用。而在命令行加這些參數(shù)則有效果,不會(huì)出錯(cuò)。這說明一個(gè)問題,這些參數(shù)根本沒有起作用。 今天需要在eclipse里調(diào)試程序,還沒到需要調(diào)試的地方就heap error了,在網(wǎng)上搜了很多地方,得到了最終的答案:選中被運(yùn)行的類,點(diǎn)擊菜單‘run->run...’,選擇(x)=Argument標(biāo)簽頁下的vm arguments框里輸入 -Xmx800m, 保存運(yùn)行。原來還需要對(duì)每個(gè)PRoject單獨(dú)設(shè)置,汗...有三種可能導(dǎo)致OutOfMemoryError。

首先是,此JVM有真實(shí)的內(nèi)存泄漏,導(dǎo)致此JVM堆在內(nèi)部實(shí)現(xiàn)時(shí)產(chǎn)生了一個(gè)Bug。這極不可靠。所有JVM都經(jīng)過充分的測(cè)試,并且,如果有人發(fā)現(xiàn)這種bug,它將絕對(duì)是最高的優(yōu)先級(jí)。因此你可以非常寬心地排除這種可能性。第二種可能的OutOfMemoryError原因只不過是,你沒有為你的應(yīng)用程序運(yùn)行時(shí)給予足夠多的可用內(nèi)存。這種情況,有兩種可能的方案,或者增加 JVM堆可用大小,或者減少你的應(yīng)用程序所需的內(nèi)存總量。提高JVM可用堆大小可以簡(jiǎn)單的使用JVM的 -Xmx 參數(shù)。假如你將此參數(shù)設(shè)置盡可能的大(可用內(nèi)存極限不要超過系統(tǒng)物理內(nèi)存,否則你的應(yīng)用程序?qū)?a href="http://www.survivalescaperooms.com/tag-3.html">分頁并暫停),仍然有以上所提到的內(nèi)存問題,那么,你需要減 少你的應(yīng)用程序所可能用到內(nèi)存總量。減少應(yīng)用程序內(nèi)存可能是簡(jiǎn)單的,你可能允許一些集合過大,例如使用了許多大的緩沖區(qū)。或者它過于復(fù)雜,要求你重新實(shí)現(xiàn) 一些類,乃至重新設(shè)計(jì)應(yīng)用程序。讀者 Jams Stauffer 指出有些JVM(例如 sun的 JVMs),還有一個(gè)“Perm”參數(shù)用來處理JVM結(jié)構(gòu)與類對(duì)象。如果你正在使用一個(gè)數(shù)量非常巨大的類集,它有可能運(yùn)行在"Perm"空間之外,然后你 需要增加此空間的大小,例如,sun的JVM使用 -XX:PermSize 與 -XX:MaxPermSize 選項(xiàng)。第三種導(dǎo)致OutOfMemoryError最為常見,無心的對(duì)象引用保持。你沒有明確無誤的釋放對(duì)象,以致于你的堆增長(zhǎng)再增長(zhǎng),直到你沒有額外的空間。處理OutOfMemoryError:是JVM內(nèi)部的BUG?不太可能。如果是,這是優(yōu)先級(jí)最高的BUG(為什么還沒有人發(fā)現(xiàn)它,而你碰到了?)。沒有足夠的內(nèi)存分配給實(shí)際運(yùn)行的應(yīng)用程序??jī)煞N選擇:使用-Xmx參數(shù)增加堆的最大使用內(nèi)存(或者使用-XX:MaxPermSize參數(shù)增加Perm空 間大小); 或者使用更小的集合/緩沖區(qū)/表空間/對(duì)象.....,以減少所需要的內(nèi)存總量,也就是說,可以調(diào)整對(duì)象大小,重新設(shè)計(jì)與重新實(shí)現(xiàn)你的應(yīng)用程 序。無心的對(duì)象引用保持?找到保持這些無意引用的源對(duì)象,改變它并釋放這些對(duì)象。在IBM開發(fā)者社區(qū)的文章綱要式的揭示了這樣一個(gè)通用的處理過程。這個(gè)過程主 要是等到應(yīng)用程序到達(dá)恒定狀態(tài)--你將期望最多的新創(chuàng)建的對(duì)象是臨時(shí)對(duì)象,并且可以被垃圾收集器收集。這常常是在應(yīng)用程序所有的初始化工作完成之后。強(qiáng)迫垃圾收集,獲得一個(gè)堆的對(duì)象快照。做任何工作可能正在導(dǎo)到無意的對(duì)象引用保持。強(qiáng)迫另一次垃圾收集并獲得第二次堆的對(duì)象快照。比較這兩個(gè)快照,觀察從第一個(gè)快照到第二個(gè)快照哪些對(duì)象在數(shù)量上有所增加。因?yàn)槟阍诳煺罩皬?qiáng)迫垃圾收集,剩下的將是所有被應(yīng)用程序引用的對(duì)象,比較兩個(gè)快照將準(zhǔn)確的標(biāo)識(shí)那些新創(chuàng)建的、保留在應(yīng)用程序里的對(duì)象。根據(jù)你對(duì)應(yīng)用程序的認(rèn)識(shí),決定兩個(gè)快照比較中,哪些對(duì)象正在無意的保持對(duì)象引用。跟蹤前導(dǎo)引用,找到哪些對(duì)象正在引用這些無意的保持對(duì)象,直到你找到導(dǎo)致此問題的源對(duì)象啟動(dòng)虛擬機(jī)的時(shí)候,加上一個(gè)參數(shù):-Xms800m -Xmx800m就好了 -Xms <size> 設(shè)置JVM初始化堆內(nèi)存大小 -Xmx <size> 設(shè)置JVM最大的堆內(nèi)存大小 如果是應(yīng)用程序,則:java -Xms800m -Xmx800m 你的類名 如果是tomcat之類的web服務(wù)器,在這個(gè)服務(wù)器的啟動(dòng)文件后面加上這個(gè)參數(shù)即可。另外設(shè)置環(huán)境變量JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

 

//轉(zhuǎn)2

 

//首先檢查程序有沒有限入死循環(huán)

 

這個(gè)問題主要還是由這個(gè)問題 java.lang.OutOfMemoryError: Java heap space 引起的。第一次出現(xiàn)這樣的的問題以后,引發(fā)了其他的問題。在網(wǎng)上一查可能是JAVA的堆棧設(shè)置太小的原因。跟據(jù)網(wǎng)上的答案大致有這兩種解決方法:1、設(shè)置環(huán)境變量

 

解決方法:手動(dòng)設(shè)置Heap size修改TOMCAT_HOME/bin/catalina.shset JAVA_OPTS= -Xms32m -Xmx512m可以根據(jù)自己機(jī)器的內(nèi)存進(jìn)行更改。2、java -Xms32m -Xmx800m className就是在執(zhí)行JAVA類文件時(shí)加上這個(gè)參數(shù),其中className是需要執(zhí)行的確類名。(包括包名)這個(gè)解決問題了。而且執(zhí)行的速度比沒有設(shè)置的時(shí)候快很多。如果在測(cè)試的時(shí)候可能會(huì)用Eclispe 這時(shí)候就需要在Eclipse ->run -arguments 中的VM arguments 中輸入-Xms32m -Xmx800m這個(gè)參數(shù)就可以了。

 

后來在Eclilpse中修改了啟動(dòng)參數(shù),在VM arguments 加入了-Xms32m -Xmx800m,問題解決。

 

一、java.lang.OutOfMemoryError: PermGen space

 

PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域,這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時(shí)就會(huì)被放到PermGen space中,它和存放類實(shí)例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤,這種錯(cuò)誤常見在web服務(wù)器對(duì)jsp進(jìn)行pre compile的時(shí)候。如果你的WEB APP下都用了大量的第三方j(luò)ar, 其大小超過了jvm默認(rèn)的大小(4M)那么就會(huì)產(chǎn)生此錯(cuò)誤信息了。解決方法: 手動(dòng)設(shè)置MaxPermSize大小

 

修改TOMCAT_HOME/bin/catalina.sh在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達(dá)到減少jar 文檔重復(fù)占用內(nèi)存的目的。

 

二、java.lang.OutOfMemoryError: Java heap spaceHeap size 設(shè)置JVM堆的設(shè)置是指java程序運(yùn)行過程中JVM可以調(diào)配使用的內(nèi)存空間的設(shè)置.JVM在啟動(dòng)的時(shí)候會(huì)自動(dòng)設(shè)置Heap size的值,其初始空間(即-Xms)是物理內(nèi)存的1/64,最大空間(-Xmx)是物理內(nèi)存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等選項(xiàng)可進(jìn)行設(shè)置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。提示:在JVM中如果98%的時(shí)間是用于GC且可用的Heap size 不足2%的時(shí)候?qū)伋龃水惓P畔ⅰL崾荆篐eap Size 最大不要超過可用物理內(nèi)存的80%,一般的要將-Xms和-Xmx選項(xiàng)設(shè)置為相同,而-Xmn為1/4的-Xmx值。 解決方法:手動(dòng)設(shè)置Heap size修改TOMCAT_HOME/bin/catalina.sh在“echo "Using CATALINA_BASE:   $CATALINA_BASE"”上面加入以下行:JAVA_OPTS="-server -Xms800m -Xmx800m   -XX:MaxNewSize=256m"

 

三、實(shí)例,以下給出1G內(nèi)存環(huán)境下java jvm 的參數(shù)設(shè)置參考:

 

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "

很大的web工程,用tomcat默認(rèn)分配的內(nèi)存空間無法啟動(dòng),如果不是在myeclipse中啟動(dòng)tomcat可以對(duì)tomcat這樣設(shè)置:

TOMCAT_HOME/bin/catalina.bat 中添加這樣一句話:

          set JAVA_OPTS= -Xmx1024M -Xms512M -XX:MaxPermSize=256m

 

如果要在myeclipse中啟動(dòng),上述的修改就不起作用了,可如下設(shè)置:

 

Myeclipse->preferences->myeclipse->servers->tomcat->tomcat×.×->JDK面板中的

 

Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m

 

Optional Java VM arguments中添加:-Xmx1024M -Xms512M -XX:MaxPermSize=256m

 

挺靈的。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岚皋县| 宁波市| 肇庆市| 古交市| 赫章县| 邛崃市| 江津市| 报价| 青州市| 静乐县| 惠东县| 清新县| 洱源县| 成都市| 巧家县| 汉源县| 达尔| 朝阳市| 仁寿县| 大埔县| 镇江市| 平遥县| 金湖县| 九寨沟县| 桂东县| 淮安市| 来凤县| 沙田区| 广昌县| 沐川县| 浮梁县| 托克托县| 永嘉县| 宜昌市| 霍山县| 黎平县| 富裕县| 桓台县| 防城港市| 南阳市| 九寨沟县|