精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

內存溢出的原因以及解決方法

開山師傅 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-06-01 11:31 ? 次閱讀

內存溢出 ,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。

內存溢出就是你要求分配的內存超出了系統能給你的,系統不能滿足需求,于是產生溢出。

內存泄漏是指你向系統申請分配內存進行使用(new),可是使用完了以后卻不歸還(delete),結果你申請到的那塊內存你自己也不能再訪問(也許你把它的地址給弄丟了),而系統也不能再次將它分配給需要的程序。一個盤子用盡各種方法只能裝4個果子,你裝了5個,結果掉倒地上不能吃了。這就是溢出!比方說棧,棧滿時再做進棧必定產生空間溢出,叫上溢,棧空時再做退棧也產生空間溢出,稱為下溢。就是分配的內存不足以放下數據項序列,稱為內存溢出.

以發生的方式來分類,內存泄漏可以分為4類:

1. 常發性內存泄漏。發生內存泄漏的代碼會被多次執行到,每次被執行的時候都會導致一塊內存泄漏。

2. 偶發性內存泄漏。發生內存泄漏的代碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對于特定的環境,偶發性的也許就變成了常發性的。所以測試環境和測試方法對檢測內存泄漏至關重要。

3. 一次性內存泄漏。發生內存泄漏的代碼只會被執行一次,或者由于算法上的缺陷,導致總會有一塊僅且一塊內存發生泄漏。比如,在類的構造函數中分配內存,在析構函數中卻沒有釋放該內存,所以內存泄漏只會發生一次。

4. 隱式內存泄漏。程序在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這里并沒有發生內存泄漏,因為最終程序釋放了所有申請的內存。但是對于一個服務器程序,需要運行幾天,幾周甚至幾個月,不及時釋放內存也可能導致最終耗盡系統的所有內存。所以,我們稱這類內存泄漏為隱式內存泄漏。

從用戶使用程序的角度來看,內存泄漏本身不會產生什么危害,作為一般的用戶,根本感覺不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會最終消耗盡系統所有的內存。從這個角度來說,一次性內存泄漏并沒有什么危害,因為它不會堆積,而隱式內存泄漏危害性則非常大,因為較之于常發性和偶發性內存泄漏它更難被檢測到

內存泄露 memory leak,是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積后果很嚴重,無論多少內存,遲早會被占光。

memory leak會最終會導致out of memory!

內存溢出的原因以及解決方法

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

1.內存中加載的數據量過于龐大,如一次從數據庫取出過多數據;

2.集合類中有對對象的引用,使用完后未清空,使得JVM不能回收;

3.代碼中存在死循環或循環產生過多重復的對象實體;

4.使用的第三方軟件中的BUG;

5.啟動參數內存值設定的過小

內存溢出的解決方案:

第一步,修改JVM啟動參數,直接增加內存。(-Xms,-Xmx參數一定不要忘記加。)

第二步,檢查錯誤日志,查看“OutOfMemory”錯誤前是否有其它異常或錯誤。

第三步,對代碼進行走查和分析,找出可能發生內存溢出的位置。

重點排查以下幾點:

1.檢查對數據庫查詢中,是否有一次獲得全部數據的查詢。一般來說,如果一次取十萬條記錄到內存,就可能引起內存溢出。這個問題比較隱蔽,在上線前,數據庫中數據較少,不容易出問題,上線后,數據庫中數據多了,一次查詢就有可能引起內存溢出。因此對于數據庫查詢盡量采用分頁的方式查詢。

2.檢查代碼中是否有死循環或遞歸調用。

3.檢查是否有大循環重復產生新對象實體。

4.檢查List、MAP等集合對象是否有使用完后,未清除的問題。List、MAP等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。

第四步,使用內存查看工具動態查看內存使用情況。

推薦幾款檢查內存泄露的軟件:

pYYBAGKW3WuAT_TIAAEBk7uB5uY506.png

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4751

    瀏覽量

    68358
  • 內存泄漏
    +關注

    關注

    0

    文章

    39

    瀏覽量

    9206
收藏 人收藏

    評論

    相關推薦

    內存故障及解決方法

    內存故障及解決方法(一)按下電源開關后電腦不啟動、黑屏故障的解決   電腦開機后就要自檢內存,但是此時因為以下幾個方面的原因,就可能造成開機無顯示的故障。  1、
    發表于 06-16 13:16

    STM32堆棧溢出會出現的問題及溢出原因分析和解決方法

    `在開發過程中,我們有時候可能會遇到數據錯誤的情況,而這個情況發生多數是由于堆棧溢出導致,這里我們將詳細講解復現堆棧溢出會導致的問題及提供相應的解決方法。1 .建立一個測試工程定義主函數定義堆棧地址
    發表于 12-09 10:00

    java內存溢出排查方法解析

     內存溢出(out of memory),通俗理解就是內存不夠,通常在運行大型軟件或游戲時,軟件或游戲所需要的內存遠遠超出了你主機內安裝的內存
    發表于 11-28 13:57 ?6737次閱讀

    加濕器不噴霧的原因解決方法

    在使用加濕器的過程中發現不噴霧或噴霧小了是什么原因呢?有什么解決方法
    的頭像 發表于 04-04 16:09 ?2.8w次閱讀

    內存溢出內存泄露的區別_內存溢出原因以及解決方法

    內存溢出內存泄露的區別是什么?內存溢出怎么解決?內存溢出
    發表于 06-01 10:27 ?2897次閱讀

    舵機常見的故障原因分析以及解決方法

    舵機的分析方法和注意事項,以及對舵機常見故障的解決方法進行一個列舉。
    的頭像 發表于 09-22 10:14 ?3754次閱讀
    舵機常見的故障<b class='flag-5'>原因</b>分析<b class='flag-5'>以及</b><b class='flag-5'>解決方法</b>

    如何解決內存溢出

    ,有時候會自動關閉軟件,重啟電腦或者軟件后釋放掉一部分內存又可以正常運行該軟件,而由系統配置、數據流、用戶代碼等原因而導致的內存溢出錯誤,即使用戶重新執行任務依然無法避免 其實很簡單,
    的頭像 發表于 09-25 10:54 ?1384次閱讀
    如何解決<b class='flag-5'>內存</b><b class='flag-5'>溢出</b>

    電感嘯叫的常見原因以及解決方法

    電子發燒友網站提供《電感嘯叫的常見原因以及解決方法.docx》資料免費下載
    發表于 10-15 11:03 ?2次下載

    變頻器過熱的故障原因解決方法

    變頻器過熱的故障原因解決方法
    的頭像 發表于 10-24 10:09 ?5586次閱讀

    java內存溢出的幾種原因和解決辦法

    內存,但是如果程序中存在內存泄漏(Memory Leak)或者使用不當的數據結構等問題,仍然有可能導致內存溢出。下面將詳細介紹Java內存
    的頭像 發表于 11-23 14:44 ?6060次閱讀

    java內存溢出排查方法

    Java內存溢出(Memory overflow)是指Java虛擬機(JVM)中的堆內存無法滿足對象分配的需求,導致程序拋出OutOfMemoryError異常。內存
    的頭像 發表于 11-23 14:46 ?3118次閱讀

    jvm內存溢出故障排查

    溢出故障排查的方法和步驟。 確認內存溢出錯誤 首先,我們需要確認應用程序是否確實發生了內存溢出
    的頭像 發表于 12-05 11:04 ?782次閱讀

    jvm內存溢出該如何定位解決

    在Java應用程序中,JVM(Java虛擬機)內存溢出是指Java應用程序試圖分配的內存超過了JVM所允許的最大內存大小,導致程序無法正常執行。內存
    的頭像 發表于 12-05 11:05 ?1295次閱讀

    內存溢出內存泄漏:定義、區別與解決方案

    內存溢出內存泄漏:定義、區別與解決方案? 內存溢出內存泄漏是計算機科學中常見的問題,在開發和
    的頭像 發表于 12-19 14:10 ?2486次閱讀

    PCB焊盤脫落的原因解決方法

    PCB焊盤脫落的原因解決方法? PCB(印刷電路板)焊盤的脫落是一個常見的問題,它會導致電子設備無法正常工作。本文將詳細介紹焊盤脫落的原因以及解決
    的頭像 發表于 01-18 11:21 ?6201次閱讀