JAVA常見錯誤處理方法
Java語言作為靜態面向物件程式設計語言的代表,極好地實現了面向物件理論,允許程式設計師以優雅的思維方式進行復雜的程式設計。本文特意為大家收集整理了JAVA常見錯誤處理方法,希望大家喜歡!
fMemoryError: Java heap space
原因:Heap記憶體溢位,意味著Young和Old generation的記憶體不夠。
解決:調整java啟動引數-Xms -Xmx 來增加Heap記憶體。
fMemoryError: 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空間夠用)。
fMemoryError: PermGen space
原因:Permanent Generation空間不足,不能載入額外的類。
解決:調整-XX:PermSize= -XX:MaxPermSize= 兩個引數來增大PermGen記憶體。一般情況下,這兩個引數不要手動設定,只要設定-Xmx足夠大即可,JVM會自行選擇合適的PermGen大小。
fMemoryError: 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,二是需要優化程式邏輯。
kOverflowError
原因:這也記憶體溢位錯誤的一種,即執行緒棧的溢位,要麼是方法呼叫層次過多(比如存在無限遞迴呼叫),要麼是執行緒棧太小。
解決:優化程式設計,減少方法呼叫層次;調整-Xss引數增加執行緒棧大小。
IOException: Too many open files
原因: 這個是由於TCP co
-
Java程式設計示例教程
本文以例項形式詳細講述了Java的反射機制,是Java程式設計中重要的技巧。分享給大家供大家參考。具體分析如下:首先,Reflection是Java程式開發語言的特徵之一,它允許執行中的Java程式對自身進行檢查,或者說"自審",並能直接操作程式的內部屬性。例如,使用它能獲得Java類...
-
如何實現javascript去除字串裡中文與空格
導語:如何實現javascript去除字串裡中文與空格呢?下面是小編給大家提供的示例程式碼實現,大家可以參考閱讀,更多詳情請關注應屆畢業生考試網。1.去掉空格:functionmoveSpace(){varstr="abcdefg";alert(ace(/[]/g,""));}moveSpace();2.去掉中文:vartitle="字串zifuc...
-
初學java程式設計入門必備的知識
基礎知識是新手學習一門新技術的必須掌握的,下面內容由小編為大家介紹初學java程式設計入門必備的知識,供大家參考!01、Java程式設計出現的背景1991年Sun公司的JamesGosling等人開始開發名稱為Oak的語言。希望用於控制嵌入在有線電視交換盒、PDA等的微處理器,但卻沒有取得...
-
Java中運算子的使用
導語:計算機的最基本用途之一就是執行數學運算,作為一門計算機語言,Java也提供了一套豐富的運算子來操縱變數。下面是java中運算子的使用,一起來學習下吧:算術運算子單目:+(取正)-(取負)++(自增1)--(自減1)雙目:+-*/%(取餘)三目:a>b?true:false說明:當a大於b的時候,為tru...