導航:首頁 > 編程語言 > java內存溢出處理

java內存溢出處理

發布時間:2023-09-25 04:13:34

java.lang.OutOfMemoryError: Java heap space內存溢出解決方案

如果你確定不是代碼造成的內存泄露,調整jvm虛擬機內存可解決(增大)。
樣例:
java -server -Xms4096m -Xmx4096m -XX:PermSize=128m -XX:MaxPermSize=512m -jar ./MssIndexAnalyze.jar
我直接運行的jar包,對tomcat,ide有不同的調整方法。但是參數是通用的。
-Xms4096m -Xmx4096m -XX:PermSize=128m -XX:MaxPermSize=512m
tomcat 設置,$TOMCAT_HOME/bin/catalina.bat:
rem ----- Execute The Requested Command ---------------------------------------

set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m -Xincgc -Xss512k -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=512m
IDE的調整參考以下鏈接:
〔http://jingyan..com/article/f7ff0bfc73f54f2e26bb138c.html〕

❷ 如何解決JAVA 內存溢出的問題、

可以監控一下你的程序到底是什麼原因造成的內存溢出,然後修改導致溢出的程序演算法應該可以解決。或者手動執行垃圾回收。使用弱引用類型也可以

❸ Java內存溢出的解決方案都有哪些

內存溢出可能是以下原因:

內存中載入的數據量過於龐大,如一次從資料庫取出過多數據;
調用介面超時且超時等待時間設置過長;
集合類中有對對象的引用,使用完後未清空,使得JVM不能回收;
代碼中存在死循環或循環產生過多重復的對象實體;
啟動參數內存值設定的過小;
那麼針對的結局方案:
優化資料庫查詢語句,如改成分頁查詢;
調用介面超時時間設置短一些,列印錯誤日誌,修正超時的介面;
集合類使用完後設置成null,例:在執行完list之後寫上list=null;
使用debug逐步查找死循環的代碼
將jvm內存的值增大:-Xms1024m -Xmx1024m -XX:MaxNewSize=1024m -XX:MaxPermSize=1024m (設置的值依據伺服器內存的大小來設定)
純手打,望採納。

❹ java內存溢出與內存泄漏怎麼解決

內存溢出 out of memory,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of
memory;比如申請了版一個integer,但給權它存了long才能存下的數,那就是內存溢出。

內存泄露 memory
leak,是指程序在申請內存後,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積後果很嚴重,無論多少內存,遲早會被佔光。

memory leak會最終會導致out of memory!

內存溢出就是你要求分配的內存超出了系統能給你的,系統不能滿足需求,於是產生溢出。

內存泄漏是指你向系統申請分配內存進行使用(new),可是使用完了以後卻不歸還(delete),結果你申請到的那塊內存你自己也不能再訪問(也許你把它的地址給弄丟了),而系統也不能再次將它分配給需要的程序。一個盤子用盡各種方法只能裝4個果子,你裝了5個,結果掉倒地上不能吃了。這就是溢出!比方說棧,棧滿時再做進棧必定產生空間溢出,叫上溢,棧空時再做退棧也產生空間溢出,稱為下溢。就是分配的內存不足以放下數據項序列,稱為內存溢出.

❺ Java程序內存溢出怎麼修改

for循環裡面寫:{
addBatch (你的insert語句 )
這里可以控制1萬條做一次提交
if(i%10000==0) ps.executeBatch();
//清空batch
ps.clearBatch ()
}
這樣就不會頻繁調用insert操作資料庫,100萬也就操作100次提交

❻ java內存溢出的問題如何排查

java程序大家都知道,內存溢出是經常見的錯誤,下面從基本的開始分析!
內存溢出是由於沒被引用的對象(垃圾)過多造成JVM沒有及時回收,造成的內存溢出。如果出現這種現象可行代碼排查:
一)是否App中的類中和引用變數過多使用了Static修飾 如public staitc Student s;在類中的屬性中使用 static修飾的最好只用基本類型或字元串。如public static int i = 0; //public static String str;
二)是否App中使用了大量的遞歸或無限遞歸(遞歸中用到了大量的建新的對象)
三)是否App中使用了大量循環或死循環(循環中用到了大量的新建的對象)
四)檢查App中是否使用了向資料庫查詢所有記錄的方法。即一次性全部查詢的方法,如果數據量超過10萬多條了,就可能會造成內存溢出。所以在查詢時應採用「分頁查詢」。
五)檢查是否有數組,List,Map中存放的是對象的引用而不是對象,因為這些引用會讓對應的對象不能被釋放。會大量存儲在內存中。
六)檢查是否使用了「非字面量字元串進行+」的操作。因為String類的內容是不可變的,每次運行"+"就會產生新的對象,如果過多會造成新String對象過多,從而導致JVM沒有及時回收而出現內存溢出。
如String s1 = "My name";
String s2 = "is";
String s3 = "xuwei";
String str = s1 + s2 + s3 +.........;這是會容易造成內存溢出的
但是String str = "My name" + " is " + " xuwei" + " nice " + " to " + " meet you"; //但是這種就不會造成內存溢出。因為這是」字面量字元串「,在運行"+"時就會在編譯期間運行好。不會按照JVM來執行的。
在使用String,StringBuffer,StringBuilder時,如果是字面量字元串進行"+"時,應選用String性能更好;如果是String類進行"+"時,在不考慮線程安全時,應選用StringBuilder性能更好。
知道原因了,解決起來就非常簡單了。

❼ java問題內存溢出

我猜測雖來然內存又跌回了源64M,但是你應該沒有OutOfMemoryError的問題了吧.-Xmx的意思只是告訴JRE最大向操作系統申請多少堆內存,並不是一直要佔有那麼多.如果異常已經沒有再出現,那麼這個問題並不嚴重.

❽ java.lang內存溢出怎麼解決

Java常見的幾種內存溢出及解決方法【情況一】:
java.lang.OutOfMemoryError:Javaheapspace:這種是java堆內存不夠,一個原因是真不夠(如遞歸的層數太多等),另一個原因是程序中有死循環;
如果是java堆內存不夠的話,可以通過調整JVM下面的配置來解決:
-Xms3062m
-Xmx3062m
【情況二】
java.lang.OutOfMemoryError:GCoverheadlimitexceeded
【解釋】:JDK6新增錯誤類型,當GC為釋放很小空間佔用大量時間時拋出;一般是因為堆太小,導致異常的原因,沒有足夠的內存。
【解決方案】:
1、查看系統是否有使用大內存的代碼或死循環;
2、通過添加JVM配置,來限制使用內存:
-XX:-UseGCOverheadLimit
【情況三】:
java.lang.OutOfMemoryError:PermGenspace:這種是P區內存不夠,可通過調整JVM的配置:
-XX:MaxPermSize=128m
-XXermSize=128m
【注】:
JVM的Perm區主要用於存放Class和Meta信息的,Class在被Loader時就會被放到PermGenspace,這個區域成為年老代,GC在主程序運行期間不會對年老區進行清理,默認是64M大小,當程序需要載入的對象比較多時,超過64M就會報這部分內存溢出了,需要加大內存分配,一般128m足夠。
【情況四】:
java.lang.OutOfMemoryError:Directbuffermemory
調整-XX:MaxDirectMemorySize=參數,如添加JVM配置:
-XX:MaxDirectMemorySize=128m
【情況五】:
java.lang.OutOfMemoryError:unabletocreatenewnativethread
【原因】:Stack空間不足以創建額外的線程,要麼是創建的線程過多,要麼是Stack空間確實小了。
【解決】:由於JVM沒有提供參數設置總的stack空間大小,但可以設置單個線程棧的大小;而系統的用戶空間一共是3G,除了Text/Data/BSS/MemoryMapping幾個段之外,Heap和Stack空間的總量有限,是此消彼長的。因此遇到這個錯誤,可以通過兩個途徑解決:1.通過-Xss啟動參數減少單個線程棧大小,這樣便能開更多線程(當然不能太小,太小會出現StackOverflowError);2.通過-Xms-Xmx兩參數減少Heap大小,將內存讓給Stack(前提是保證Heap空間夠用)。
【情況六】:
java.lang.StackOverflowError
【原因】:這也內存溢出錯誤的一種,即線程棧的溢出,要麼是方法調用層次過多(比如存在無限遞歸調用),要麼是線程棧太小。
【解決】:優化程序設計,減少方法調用層次;調整-Xss參數增加線程棧大小。

閱讀全文

與java內存溢出處理相關的資料

熱點內容
打完新冠疫苗下載什麼app可以查到 瀏覽:879
海信電視用哪個app看網路電視 瀏覽:96
編程什麼時候流行的 瀏覽:683
自學編程新手看什麼書 瀏覽:180
linux全盤tar 瀏覽:454
ps文件命名自動輸入怎麼辦 瀏覽:467
iphone6plus切圖 瀏覽:822
iphone6沒有提示更新 瀏覽:41
cc網路圖教程 瀏覽:650
u盤無法剪切文件到電腦里 瀏覽:497
中海達靜態數據大概多少內存 瀏覽:599
蘋果6s手機文件管理器 瀏覽:107
qq頭像非主流女生捂臉 瀏覽:736
java判斷string編碼 瀏覽:941
excel工資簿如何匹配相同數據 瀏覽:159
視頻課程學習有哪些app 瀏覽:375
鐵模編程怎麼學 瀏覽:298
數學網路研修研究問題有哪些 瀏覽:677
stl文件怎麼列印 瀏覽:427
json格式變數寫法 瀏覽:68

友情鏈接