問:簡單說說 Java 中內(nèi)存泄漏與內(nèi)存溢出的區(qū)別憨降?
答:內(nèi)存溢出(OutOfMemory)是指程序在申請內(nèi)存時沒有足夠的內(nèi)存空間供其使用准脂。內(nèi)存泄露(MemoryLeak)是指程序在申請內(nèi)存后無法釋放已申請的內(nèi)存空間。一次內(nèi)存泄露危害可以忽略砍鸠,但內(nèi)存泄露堆積后果很嚴(yán)重驾中,無論多少內(nèi)存遲早會被消耗盡玲躯,所以內(nèi)存泄漏最終可能會導(dǎo)致內(nèi)存溢出。
內(nèi)存泄漏本身一般對業(yè)務(wù)邏輯不會產(chǎn)生什么危害减拭,作為一般的用戶在頻次不高的情況下根本感覺不到內(nèi)存泄漏的存在蔽豺,真正有危害的是內(nèi)存泄漏的堆積,這會最終消耗盡系統(tǒng)所有的內(nèi)存峡谊,所以頻次不高和占用內(nèi)存不大的泄露一般都比較難以發(fā)現(xiàn)定位茫虽,如果需要定位分析內(nèi)存泄漏可以采用一些第三方工具輔助,譬如 MAT 等既们。
內(nèi)存溢出出現(xiàn)的原因一般比較多濒析,譬如內(nèi)存中一次加載的數(shù)據(jù)量過于龐大,啟動參數(shù)內(nèi)存值設(shè)定的過小啥纸,內(nèi)存持續(xù)泄漏導(dǎo)致內(nèi)存用光等号杏。解決內(nèi)存溢出可以通過修改 JVM 啟動參數(shù)( -Xms/-Xmx 等,不過一般不建議)斯棒,檢查分析代碼找出龐大數(shù)據(jù)或者泄漏點(diǎn)盾致。