最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JVM內(nèi)存溢出和內(nèi)存泄漏的區(qū)別及說明

 更新時(shí)間:2024年02月01日 09:00:24   作者:Sharley  
這篇文章主要介紹了JVM內(nèi)存溢出和內(nèi)存泄漏的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

1、概念的區(qū)分

1.1、 內(nèi)存泄露(memory leak)

程序運(yùn)行結(jié)束后,沒有釋放 所占用的內(nèi)存空間。

一次內(nèi)存泄漏 似乎不會(huì)有大的影響,但內(nèi)存泄漏 不斷累積,最終可用內(nèi)存會(huì)變得越來越少。

比如說,總內(nèi)存大小是100 MB,有40MB的內(nèi)存一直無法回收,那么可用的只有60MB 。這40MB的就是內(nèi)存泄漏。

內(nèi)存泄漏,就是程序運(yùn)行結(jié)束后,沒有釋放的內(nèi)存。

1.2、內(nèi)存溢出(out of memory)

程序運(yùn)行時(shí),在申請(qǐng)內(nèi)存空間時(shí),沒有足夠的內(nèi)存空間供其正常使用,程序運(yùn)行停止,并拋出 out of memory 。

比如程序運(yùn)行時(shí)申請(qǐng)了一個(gè)10MB 空間, 但是當(dāng)前可用內(nèi)存只有5MB,程序無法正常執(zhí)行,這就是內(nèi)存溢出。

 內(nèi)存溢出 ,可以理解為程序運(yùn)行需要的內(nèi)存大于當(dāng)前可用的內(nèi)存。

1.3 舉例

(1)單例模式中,單例的生命周期和應(yīng)用程序是一樣長的,所以單例程序中如果持有對(duì)外部對(duì)象的引用的話,那么這個(gè)外部對(duì)象是不能被回收的,則會(huì)導(dǎo)致 內(nèi)存泄露 的產(chǎn)生。

(2)一些提供close的資源未閉導(dǎo)致 內(nèi)存泄漏 。數(shù)據(jù)庫連接(dataSource.getConnection() ),網(wǎng)絡(luò)連接(socket)和 IO流的連接必須在finally中 close,否則不能被回收的。

(3)讀取大文件,一次讀取的文件大于可用內(nèi)存,會(huì)導(dǎo)致 內(nèi)存溢出 ??捎脙?nèi)存是1G,怎么讀取2G的文件呢?建一個(gè)100MB的字節(jié)數(shù)組,讀10次。

2、二者的區(qū)別和聯(lián)系

2.1 區(qū)別

內(nèi)存泄露: 程序運(yùn)行結(jié)束后,所占用的內(nèi)存沒有全部釋放。

內(nèi)存溢出:程序運(yùn)行時(shí),需要的內(nèi)存大于當(dāng)前可用的內(nèi)存,內(nèi)存不足,程序無法繼續(xù)執(zhí)行,拋出 “內(nèi)存溢出”,程序運(yùn)行中斷,結(jié)束。

2.2 聯(lián)系

一次 內(nèi)存泄露 可能對(duì)程序運(yùn)行沒有明顯的影響,多次 內(nèi)存泄露 最終會(huì)導(dǎo)致 內(nèi)存溢出 。

比如總內(nèi)存大小是100MB,一次程序運(yùn)行結(jié)束有,有10MB 沒有釋放,當(dāng)前可用內(nèi)存還有90MB,程序還可以運(yùn)行。但是多次運(yùn)行后, 可用內(nèi)存 最終為0, 沒有可以內(nèi)存或內(nèi)存不足時(shí),程序在下一次運(yùn)行時(shí),會(huì)因?yàn)閮?nèi)存不足,而出現(xiàn) 內(nèi)存溢出 。

3、內(nèi)存溢出的原因以及解決方法

3.1 內(nèi)存溢出的原因

引起內(nèi)存溢出的原因有很多種,小編列舉一下常見的有以下幾種:

  • 內(nèi)存中加載的數(shù)據(jù)量過于龐大,如一次從數(shù)據(jù)庫取出過多數(shù)據(jù);
  • 集合類中有對(duì)對(duì)象的引用,使用完后未清空,使得JVM不能回收;
  • 代碼中存在死循環(huán)或循環(huán)產(chǎn)生過多重復(fù)的對(duì)象實(shí)體;
  • 使用的第三方軟件中的BUG;啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過小 。

3.2 內(nèi)存溢出的解決方案

第一步,修改JVM啟動(dòng)參數(shù),直接增加內(nèi)存。(-Xms、-Xmx 參數(shù)一定不要忘記加)

第二步,檢查錯(cuò)誤日志,查看 “OutOfMemory” 錯(cuò)誤前是否有其它異?;蝈e(cuò)誤。

第三步,對(duì)代碼進(jìn)行走查和分析,找出可能發(fā)生內(nèi)存溢出的位置。

重點(diǎn)排查以下幾點(diǎn):

1.檢查對(duì)數(shù)據(jù)庫查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。

  • 一般來說,如果一次取十萬條記錄到內(nèi)存,就可能引起內(nèi)存溢出。
  • 這個(gè)問題比較隱蔽,在上線前,數(shù)據(jù)庫中數(shù)據(jù)較少,不容易出問題,上線后,
  • 數(shù)據(jù)庫中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫查詢盡量采用分頁的方式查詢。

2.檢查代碼中是否有死循環(huán)或遞歸調(diào)用。 

3.檢查是否有大循環(huán)重復(fù)產(chǎn)生新對(duì)象實(shí)體。

4.檢查對(duì)數(shù)據(jù)庫查詢中,是否有一次獲得全部數(shù)據(jù)的查詢。

  • 一般來說,如果一次取十萬條記錄到內(nèi)存,就可能引起內(nèi)存溢出。
  • 這個(gè)問題比較隱蔽,在上線前,數(shù)據(jù)庫中數(shù)據(jù)較少,不容易出問題,
  • 上線后,數(shù)據(jù)庫中數(shù)據(jù)多了,一次查詢就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫查詢盡量采用分頁的方式查詢。

5.檢查List、MAP等集合對(duì)象是否有使用完后,未清除的問題。

List、MAP等集合對(duì)象會(huì)始終存有對(duì)對(duì)象的引用,使得這些對(duì)象不能被GC回收。

第四步,使用內(nèi)存查看工具動(dòng)態(tài)查看內(nèi)存使用情況。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java過濾器中Filter的ChainFilter過濾鏈

    java過濾器中Filter的ChainFilter過濾鏈

    這篇文章主要介紹了java過濾器中Filter的ChainFilter過濾鏈,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來學(xué)習(xí)一下
    2020-07-07
  • 詳解如何實(shí)現(xiàn)SpringBoot的底層注解

    詳解如何實(shí)現(xiàn)SpringBoot的底層注解

    今天給大家?guī)淼奈恼率侨绾螌?shí)現(xiàn)SpringBoot的底層注解,文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴很有幫助,需要的朋友可以參考下
    2021-06-06
  • windows下zookeeper配置java環(huán)境變量的方法

    windows下zookeeper配置java環(huán)境變量的方法

    今天小編就為大家分享一篇關(guān)于windows下zookeeper配置java環(huán)境變量的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • java -jar 運(yùn)行及日志輸出過程

    java -jar 運(yùn)行及日志輸出過程

    這篇文章主要介紹了java -jar 運(yùn)行及日志輸出過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • 詳解如何獨(dú)立使用ribbon實(shí)現(xiàn)業(yè)務(wù)客戶端負(fù)載均衡

    詳解如何獨(dú)立使用ribbon實(shí)現(xiàn)業(yè)務(wù)客戶端負(fù)載均衡

    這篇文章主要為大家介紹了詳解如何獨(dú)立使用ribbon實(shí)現(xiàn)業(yè)務(wù)客戶端負(fù)載均衡,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Jenkins自動(dòng)部署Net Core過程圖解

    Jenkins自動(dòng)部署Net Core過程圖解

    這篇文章主要介紹了Jenkins自動(dòng)部署Net Core過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • java集合快速構(gòu)建成樹形json實(shí)例

    java集合快速構(gòu)建成樹形json實(shí)例

    文章介紹了如何使用Java構(gòu)建樹形結(jié)構(gòu)的JSON,并實(shí)現(xiàn)了一個(gè)代碼工具來簡化這一過程,該工具使用類適配器模式,允許靈活切換樹形結(jié)構(gòu),且無需修改實(shí)體類代碼,提高了代碼的可維護(hù)性和擴(kuò)展性
    2025-11-11
  • Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼

    Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java MD5消息摘要算法原理及實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳談Jedis連接池的使用

    詳談Jedis連接池的使用

    下面小編就為大家?guī)硪黄斦凧edis連接池的使用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java使用JSqlParser解析復(fù)雜的SQL語句的詳細(xì)步驟

    Java使用JSqlParser解析復(fù)雜的SQL語句的詳細(xì)步驟

    這篇文章介紹了在Java代碼中使用 JSqlParser解析復(fù)雜SQL語句的相關(guān)內(nèi)容,包括JSqlParser是什么及安裝步驟,其使用場景如分析、轉(zhuǎn)換、生成和驗(yàn)證SQL語句,處理SQL注入攻擊的方法,以及解析復(fù)雜SQL語句的步驟、示例代碼和對(duì)不同類型語句的處理,需要的朋友可以參考下
    2025-01-01

最新評(píng)論

石阡县| 腾冲县| 文水县| 漳州市| 黄浦区| 天气| 昌黎县| 微山县| 洛扎县| 涞水县| 龙海市| 偃师市| 马尔康县| 克什克腾旗| 通榆县| 北票市| 南昌市| 大石桥市| 甘洛县| 蓬莱市| 永安市| 环江| 射阳县| 温州市| 新乐市| 邵东县| 咸阳市| 四平市| 韩城市| 嵊泗县| 安西县| 平泉县| 泗水县| 永兴县| 刚察县| 彭山县| 五家渠市| 太和县| 麻城市| 外汇| 将乐县|