Java的垃圾回收機(jī)制給了程序猿便利,我們可以不需要顯式釋放資源。但想高枕無憂卻是不能,OOM像個隱藏在暗處的幽(hua)靈(nong),威脅著可憐、弱小又漂亮的程序猿。
成都創(chuàng)新互聯(lián)公司是專業(yè)的平陽網(wǎng)站建設(shè)公司,平陽接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行平陽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
一般來說,一個健康的程序,它是不應(yīng)該出現(xiàn)OOM的。內(nèi)存里的對象從生到死,井然有序。但由于一些人為的失誤,往往會讓一些對象逃過GC的制裁,跳出GC外,不在垃圾中。這個時候,內(nèi)存泄漏就發(fā)生了。
內(nèi)存泄露,是指程序在申請內(nèi)存并且用完這塊內(nèi)存后(對象不再需要了),沒有釋放已申請的內(nèi)存空間。少數(shù)偶然的內(nèi)存泄漏,雖然不太好,但問題不大,我們也不至于對那點內(nèi)存摳摳搜搜的。但如果是內(nèi)存不斷泄漏,直到新的對象沒有足夠的空間生成,就會導(dǎo)致OOM。
拋出OOM異常
當(dāng)程序拋出OutOfMemoryError,如果你自認(rèn)不是太摳,給了這個程序足夠的空間,那么可以懷疑有內(nèi)存泄漏
內(nèi)存持續(xù)上升
一個健康的程序應(yīng)該有平穩(wěn)的新陳代謝,內(nèi)存占用應(yīng)該維持在一定范圍。但如果內(nèi)存持續(xù)飆升,甚至到達(dá)了一個危險的值,那么可以懷疑有內(nèi)存泄漏。
查看GC情況
首先獲取到應(yīng)用的pid,可以使用java的jps命令,或者ps -ef|grep 應(yīng)用名關(guān)鍵詞
可以看到Eden(E)持續(xù)造對象,并且滿了之后,老年代(O)增加,E區(qū)騰空后繼續(xù)造對象。(程序多執(zhí)行一段時間,或者造對象速度提快點,最終會拋出OOM)
查看存活對象
根據(jù)存活對象的不正常增長情況,分析程序中哪些地方用到了這種對象,也可以大致推斷出可能的內(nèi)存泄漏處。