日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别

發布時間:2024/9/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JAVA中的內存溢出和內存泄漏分別是什么,有什么聯系和區別,我談談自己的理解。

內存泄漏(memory?leak?):申請了內存不釋放,比如100m的內存,分配了10m的內存一直不回收,那么可以用的內存只有90m了,仿佛泄露掉了一部分;通俗一點講的話就是【占著茅坑不拉shi】。

內存溢出(out?of?memory):申請內存時,沒有足夠的內存可以使用;通俗一點兒講,一個廁所就三個坑,有兩個站著茅坑不走的,剩下最后一個表示壓力很大,這時候一下子來了兩個人,坑位(內存)就不夠了。

內存泄漏和內存溢出的關系:內存泄露的增多,最終會導致內存溢出。

這是一個很有味道的例子......

如上圖,對象X引用對象Y,X的生命周期為60,Y的生命周期為20,當Y生命周期結束的時候,X依然引用著B,這時候,垃圾回收期是不會回收對象Y的;如果對象X還引用著生命周期比較短的A、B、C...對象A又引用著對象a、b、c...

那么就可能造成大量無用的對象不能被回收,進而占據了內存資源,造成內存泄漏,直到內存溢出。

內存泄漏的分類

經常(不斷)發生:發生內存泄露的代碼會被多次執行,每次執行,泄露一塊內存;

偶然發生:在某些特定情況下才會發生;

一次性:發生內存泄露的方法只會執行一次;

隱式泄露:一直占著內存不釋放,直到執行結束;嚴格的說這個不算內存泄露,因為最終釋放掉了,但是如果執行時間特別長,也可能會導致內存耗盡。

內存泄露產生的可能原因

循環過多或死循環,產生大量對象;

靜態集合類引起內存泄漏,因為靜態集合的生命周期和應用一致,所以靜態集合引用的對象不能被釋放;

單例模式,和靜態集合導致內存泄露的原因類似;

事件監聽(listeners)和回調(callbacks);

各種連接,比如數據庫連接、Socket連接、IO等,必須顯式釋放(close);

內存中加載數據量過大;我之前項目有一次上線的時候,應用啟動奇慢直到夯死,就是因為代碼中會加載一個表中的數據到緩存(內存)中,測試環境只有幾百條數據,但是生產環境有幾百萬的數據。

總結

以上是生活随笔為你收集整理的java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。