<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    java jvm 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別

    共 1836字,需瀏覽 4分鐘

     ·

    2021-03-25 11:17

    點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”

    優(yōu)質(zhì)文章,第一時(shí)間送達(dá)

      作者 |  xiaojin21cen

    來(lái)源 |  urlify.cn/N7FVJr

    1、概念的區(qū)分

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

    是指程序在申請(qǐng)內(nèi)存時(shí),沒(méi)有足夠的內(nèi)存空間供其使用,出現(xiàn) out of memory 。

    比如申請(qǐng)了一個(gè)10MB 空間, 但是當(dāng)前內(nèi)存只有5MB,那就是內(nèi)存溢出。

    javadoc 對(duì) OutOfMemoryError 的解釋是, 沒(méi)有空閑內(nèi)存,垃圾收集器也無(wú)未能提供更多的內(nèi)存空間 。

    內(nèi)存泄露 memory leak

    是指程序運(yùn)行結(jié)束后,沒(méi)有釋放已所占用的內(nèi)存空間,一次內(nèi)存泄漏 似乎不會(huì)有大的影響,但內(nèi)存泄漏 堆積后的后果就是 內(nèi)存溢出。

    1)單例模式

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

    2)一些提供close的資源未閉導(dǎo)致內(nèi)存泄漏

    數(shù)據(jù)庫(kù)連接(dataSource.getConnection() ),網(wǎng)絡(luò)連接(socket)和 IO流的連接必須在finally中 close,否則不能被回收的。

    2、二者的關(guān)系:

    • 內(nèi)存溢出就是你要的內(nèi)存空間超過(guò)了系統(tǒng)實(shí)際分配給你的空間,此時(shí)系統(tǒng)相當(dāng)于沒(méi)法滿(mǎn)足你的需求,就會(huì)報(bào)內(nèi)存溢出的錯(cuò)誤。

    • 內(nèi)存溢出:一個(gè)盤(pán)子用盡各種方法只能裝4個(gè)果子,你裝了5個(gè),結(jié)果掉倒地上不能吃了。這就是溢出。比方說(shuō)棧,棧滿(mǎn)時(shí)再做進(jìn)棧必定產(chǎn)生空間溢出,叫上溢,??諘r(shí)再做退棧也產(chǎn)生空間溢出,稱(chēng)為下溢。就是分配的內(nèi)存不足以放下數(shù)據(jù)項(xiàng)序列,稱(chēng)為內(nèi)存溢出。說(shuō)白了就是我承受不了那么多,那我就報(bào)錯(cuò)。

    • 內(nèi)存泄漏是指你向系統(tǒng)申請(qǐng)分配內(nèi)存進(jìn)行使用(new),可是使用完了以后卻不歸還(delete),結(jié)果你申請(qǐng)到的那塊內(nèi)存你自己也不能再訪(fǎng)問(wèn)(也許你把它的地址給弄丟了),而系統(tǒng)也不能再次將它分配給需要的程序。就相當(dāng)于你租了個(gè)帶鑰匙的柜子,你存完?yáng)|西之后把柜子鎖上之后,把鑰匙丟了或者沒(méi)有將鑰匙還回去,那么結(jié)果就是這個(gè)柜子將無(wú)法供給任何人使用,也無(wú)法被垃圾回收器回收,因?yàn)檎也坏剿娜魏涡畔ⅰ?/span>

      內(nèi)存泄漏的堆積最終會(huì)導(dǎo)致內(nèi)存溢出。

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

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

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

    1. 內(nèi)存中加載的數(shù)據(jù)量過(guò)于龐大,如一次從數(shù)據(jù)庫(kù)取出過(guò)多數(shù)據(jù);

    2. 集合類(lèi)中有對(duì)對(duì)象的引用,使用完后未清空,使得JVM不能回收;

    3. 代碼中存在死循環(huán)或循環(huán)產(chǎn)生過(guò)多重復(fù)的對(duì)象實(shí)體;

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

    5. 啟動(dòng)參數(shù)內(nèi)存值設(shè)定的過(guò)小 。

    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ù)庫(kù)查詢(xún)中,是否有一次獲得全部數(shù)據(jù)的查詢(xún)。
     一般來(lái)說(shuō),如果一次取十萬(wàn)條記錄到內(nèi)存,就可能引起內(nèi)存溢出。
     這個(gè)問(wèn)題比較隱蔽,在上線(xiàn)前,數(shù)據(jù)庫(kù)中數(shù)據(jù)較少,不容易出問(wèn)題,上線(xiàn)后,
     數(shù)據(jù)庫(kù)中數(shù)據(jù)多了,一次查詢(xún)就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫(kù)查詢(xún)盡量采用分頁(yè)的方式查詢(xún)。
     
    2.檢查代碼中是否有死循環(huán)或遞歸調(diào)用。

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

    4.檢查對(duì)數(shù)據(jù)庫(kù)查詢(xún)中,是否有一次獲得全部數(shù)據(jù)的查詢(xún)。
     一般來(lái)說(shuō),如果一次取十萬(wàn)條記錄到內(nèi)存,就可能引起內(nèi)存溢出。
     這個(gè)問(wèn)題比較隱蔽,在上線(xiàn)前,數(shù)據(jù)庫(kù)中數(shù)據(jù)較少,不容易出問(wèn)題,
     上線(xiàn)后,數(shù)據(jù)庫(kù)中數(shù)據(jù)多了,一次查詢(xún)就有可能引起內(nèi)存溢出。因此對(duì)于數(shù)據(jù)庫(kù)查詢(xún)盡量采用分頁(yè)的方式查詢(xún)。

    5.檢查L(zhǎng)ist、MAP等集合對(duì)象是否有使用完后,未清除的問(wèn)題。
     List、MAP等集合對(duì)象會(huì)始終存有對(duì)對(duì)象的引用,使得這些對(duì)象不能被GC回收。

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



    感謝點(diǎn)贊支持下哈 

    瀏覽 32
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    国产视频福利在线 | 操逼视频一级 | 在线观看中文字幕无码 | 亚洲手机免费看 | 亚洲天堂国产无码在线 |