溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java內存泄露和OutOfMemory

發布時間:2020-07-17 16:28:10 來源:網絡 閱讀:504 作者:愛與夢想 欄目:軟件技術

1.內存泄露:

Java的內存泄漏是指某些對象不再被應用程序使用,而垃圾收集器(Garbage Collector)卻沒能識別它們是“不再使用的”,所以沒有對這些對象進行回收,或者由于某些原因無法回收或者回收不徹底!


舉例:

  • 各種連接,比如數據庫連接(dataSourse.getConnection()),網絡連接(socket)和io連接,除非其顯式的調用了其close()方法將其連接關閉,否則是不會自動被GC 回收的。

  • 靜態集合類沒有被釋放-對象沒有被釋放

  • 遞歸調用層次太多


如果那些不使用的對象占用堆(heap)空間足夠大,使得應用程序無法滿足下一次內存分配需求,就會導致OutOfMemoryError錯誤。


內存泄漏和系統超負荷兩者是有區別的,雖然可能導致的最終結果是一樣的。

內存泄漏是用完的資源沒有回收引起錯誤,而系統超負荷則是系統確實沒有那么多資源可以分配了(其他的資源都在使用)。

內存泄漏可以通過軟件調優來解決,系統超負荷則只能通過更新硬件來解決。


2.內存泄漏的表現

---內存快被占滿,但還沒被占滿,處于臨界點,這時候不會有報錯,但會影響性能

---日志里明確產生OOM等錯誤。比如,下圖,回落點連起來基本水平則表示正?;厥?,反之回收不徹底。

?java內存泄露和OutOfMemory


3.內存泄露的排查思路:

-----JVM和GC的關鍵參數設置(比如,-Xms -Xmx等都沒有設置,那么可能會出現內存泄露)

-----排查代碼


4.OutOfMemory常見類型

----堆空間被占滿https://blog.51cto.com/11009785/2382260

----永久代/元空間被占滿https://blog.51cto.com/11009785/2379670

----棧溢出:java.lang.stackoverflowerror;fatal:stack size too small

??????????排查:先看參數-Xss:每個線程的棧大小,用于保存函數調用、返回地址等,默認1M,如果報錯,改為2M,如果還不行,捕獲快照,去排查代碼,有可能是遞歸調用的層次太多了。

----系統內存被占滿:java.lang.outofmemoryerror:unable to create new native thread

? ? 解決:升級硬件


5.java.lang.OutOfMemoryError錯誤的可能原因,及排查思路:

---空間不足

? ?---首先排查是不是硬件方面的問題

?? ---如果硬件不錯,再排查參數,是不是設置的小了

---內存泄漏

? ?---如果硬件和參數都沒問題,那么懷疑是內存泄露,需要排查JVM和GC的參數設置,如果還不行,需要排查代碼

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女