Java中的OutOfMemoryError
java.lang.OutOfMemoryError: Java heap space
原因:Heap記憶體溢位,意味著Young和Old generation的記憶體不夠。
解決:調整java啟動引數 -Xms -Xmx 來增加Heap記憶體。
java.lang.OutOfMemoryError: unable to create new native thread
原因:Stack空間不足以建立額外的執行緒,要麼是建立的執行緒過多,要麼是Stack空間確實小了。
解決:由於JVM沒有提供引數設定總的stack空間大小,但可以設定單個執行緒棧的大小;而系統的使用者空間一共是3G,除了Text/Data/BSS/MemoryMapping幾個段之外,Heap和Stack空間的總量有限,是此消彼長的。因此遇到這個錯誤,可以通過兩個途徑解決:1.通過-Xss啟動引數減少單個執行緒棧大小,這樣便能開更多執行緒(當然不能太小,太小會出現StackOverflowError);2.通過-Xms -Xmx 兩引數減少Heap大小,將記憶體讓給Stack(前提是保證Heap空間夠用)。
java.lang.OutOfMemoryError: PermGen space
原因:Permanent Generation空間不足,不能載入額外的類。
解決:調整-XX:PermSize= -XX:MaxPermSize= 兩個引數來增大PermGen記憶體。一般情況下,這兩個引數不要手動設定,只要設定-Xmx足夠大即可,JVM會自行選擇合適的PermGen大小。
java.lang.OutOfMemoryError: Requested array size exceeds VM limit
原因:這個錯誤比較少見(試著new一個長度1億的陣列看看),同樣是由於Heap空間不足。如果需要new一個如此之大的陣列,程式邏輯多半是不合理的。
解決:修改程式邏輯吧。或者也可以通過-Xmx來增大堆記憶體。
在GC花費了大量時間,卻僅回收了少量記憶體時,也會報出OutOfMemoryError,我只遇到過一兩次。當使用-XX:+UseParallelGC或-XX:+UseConcMarkSweepGC收集器時,在上述情況下會報錯,在HotSpot GC Turning文件上有說明:
The parallel(concurrent) collector will throw an OutOfMemoryError if too much time is being spent in garbage collection: if more than 98% of the total time is spent in garbage collection and less than 2% of the heap is recovered, an OutOfMemoryError will be thrown.
對這個問題,一是需要進行GC turning,二是需要優化程式邏輯。
java.lang.StackOverflowError
原因:這也記憶體溢位錯誤的一種,即執行緒棧的溢位,要麼是方法呼叫層次過多(比如存在無限遞迴呼叫),要麼是執行緒棧太小。
解決:優化程式設計,減少方法呼叫層次;調整-Xss引數增加執行緒棧大小。
相關文章
- 深入解析 Java OutOfMemoryErrorJavaError
- java.lang.OutOfMemoryErrorJavaError
- java.lang.OutOfMemoryError: Java heap spaceJavaError
- java.lang.OutOfMemoryError: Java heap space的解決JavaError
- java.lang.OutOfMemoryError: PermGen spaceJavaError
- kettle java.lang.OutOfMemoryError: Java heap spaceJavaError
- java - OutOfMemoryError: Java heap space 堆空間不足JavaError
- "Cluster-MembershipReceiver" java.lang.OutOfMemoryErrorJavaError
- mysql 報錯:java.lang.OutOfMemoryError: Java heap spaceMySqlJavaError
- java.lang.OutOfMemoryError及解決方案JavaError
- 已經解決java.lang.OutOfMemoryErrorJavaError
- java.lang.OutOfMemoryError:unabletocreatenewnativethread(轉)JavaErrorthread
- Tomcat:Caused by: java.lang.OutOfMemoryError: PermGen space .TomcatJavaError
- Java記憶體溢位OutOfMemoryError的產生與排查Java記憶體溢位Error
- eclipse java.lang.OutOfMemoryError: Java heap space 解決方案EclipseJavaError
- java.lang.OutOfMemoryError: PermGen space及其解決方法JavaError
- 轉享: java.lang.OutOfMemoryError: PermGen space 問題JavaError
- opatch java.lang.OutOfMemoryError:Java heap space錯誤一例JavaError
- Error creating bean with name 'memcachedClient'...java.lang.OutOfMemoryErrorErrorBeanclientJava
- 一個看法 關於java.lang.OutOfMemoryError: PermGen spaceJavaError
- Tomcat發生java.lang.OutOfMemoryError: PermGen space的解決方案TomcatJavaError
- OutOfMemoryError異常Error
- 手動寫java OOM記憶體溢位 java.lang.OutOfMemoryError: Java heap spaceJavaOOM記憶體溢位Error
- 手動寫java記憶體溢位 java.lang.OutOfMemoryError: PermGen spaceJava記憶體溢位Error
- 深入理解Java虛擬機器之實戰OutOfMemoryErrorJava虛擬機Error
- idea專案啟動報錯:java.lang.OutOfMemoryErrorIdeaJavaError
- Jmeter記憶體溢位:java.lang.OutOfMemoryError: Java heap space解決思路JMeter記憶體溢位JavaError
- Idea執行遇到:maven-resources-production....:java.lang.OutOfMemoryError: Java heap spaceIdeaMavenJavaError
- myeclipse中tomcat部署程式出現:java.lang.OutOfMemoryError:PermGen space 異常解決方法EclipseTomcatJavaError
- 解決Eclipse和MyEclipsejava.lang.OutOfMemoryError Java heap space的錯誤EclipseJavaError
- 救命啊java.lang.OutOfMemoryError: unable to create new native threadJavaErrorthread
- 查詢並修復Android中的記憶體洩露—OutOfMemoryErrorAndroid記憶體洩露Error
- JVM(四)——OutOfMemoryError 異常JVMError
- 解決tomcat outOfMemoryErrorTomcatError
- java.lang.OutOfMemoryError- unable to create new native thread 問題排查JavaErrorthread
- java.lang.OutOfMemoryError: unable to create new native thread如何解決JavaErrorthread
- Weblogic開啟managed server報錯java.lang.OutOfMemoryError: PermGen spaceWebServerJavaError
- 測試 web程式,tomcat出現java.lang.OutOfMemoryError異常。WebTomcatJavaError