內(nèi)存泄漏是沒有使用對(duì)象的情況,但是垃圾收集器無法將它們從內(nèi)存中刪除,因?yàn)樗鼈內(nèi)匀槐灰?。如果你是程序員,那么Java中的內(nèi)存泄漏對(duì)你不利,因?yàn)樗枞藘?nèi)存資源并隨著時(shí)間的推移降低系統(tǒng)性能。如果不處理,系統(tǒng)會(huì)顯示 java.lang.OutOfMemoryError 錯(cuò)誤。
Java 中的內(nèi)存泄漏類型
通過靜態(tài)字段,在Java中,大量使用靜態(tài)變量是內(nèi)存泄漏的一個(gè)原因。靜態(tài)字段通常保留在內(nèi)存中,直到應(yīng)用程序運(yùn)行為止。
如何預(yù)防?
l 應(yīng)盡量減少靜態(tài)字段的使用,以防止Java中的內(nèi)存泄漏。
l 使用單例時(shí),依賴延遲加載設(shè)計(jì)模式,以便僅在需要時(shí)配置資源。
通過未封閉的資源:
每當(dāng)我們創(chuàng)建新資源(例如連接和流)時(shí),JVM 都會(huì)為這些資源分配內(nèi)存。如果這些資源沒有關(guān)閉,分配給這些資源的內(nèi)存就會(huì)被阻塞,垃圾回收器無法釋放這些空間。
如何預(yù)防?
l 如果不再需要資源,則應(yīng)在最后一個(gè)塊中關(guān)閉它們。
l 用于關(guān)閉資源的代碼不應(yīng)有任何異常。
l 我們可以使用 try-with-resources 塊來防止Java內(nèi)存泄漏。
如何避免Java中的內(nèi)存泄漏?
使用引用對(duì)象避免內(nèi)存泄漏:
我們可以使用 java.lang.ref 包來引用Java中的對(duì)象。通過使用 java.lang.ref 包,你可以在程序中使用垃圾收集器。我們不是直接引用對(duì)象,而是使用垃圾收集器容易清除的特殊引用對(duì)象。
我們可以與垃圾收集器一起使用引用對(duì)象自動(dòng)執(zhí)行任務(wù)。垃圾收集器會(huì)自動(dòng)刪除弱可達(dá)的偵聽器。
詳細(xì)垃圾收集
如果要獲取垃圾收集器的詳細(xì)跟蹤信息,可以啟用詳細(xì)垃圾收集。要啟用詳細(xì)垃圾收集,我們需要在 JVM 配置中添加一個(gè)參數(shù)。添加此參數(shù)后,我們可以看到垃圾收集器的詳細(xì)信息。
通過啟用內(nèi)存分析器
內(nèi)存分析器是可以監(jiān)視內(nèi)存使用情況并檢測(cè)任何應(yīng)用程序中的Java內(nèi)存泄漏的工具。Java 分析器還可以幫助分析內(nèi)存的分配方式。Java VisualVM、JProfiler 和 YourKit 等多種工具可用于Java中的內(nèi)存分析。
在Java中還有更多避免內(nèi)存泄漏的方法,它們是:
使用堆轉(zhuǎn)儲(chǔ)
基準(zhǔn)測(cè)試
Eclipse 內(nèi)存泄漏警告
代碼審查
WebApp 類加載器
結(jié)論
Java 中的內(nèi)存泄漏被認(rèn)為是一種疾病,因?yàn)樗鼈儠?huì)阻礙資源的性能。如果他們不能及時(shí)修復(fù)或避免,隨著時(shí)間的推移,可能會(huì)導(dǎo)致致命的應(yīng)用程序崩潰。
Java 內(nèi)存泄漏可以使用生產(chǎn)代碼作為一種令人不安的體驗(yàn)。泄漏可能很難找到并最小化。但是如果我們定期執(zhí)行準(zhǔn)確的代碼,我們可以將Java中內(nèi)存泄漏的風(fēng)險(xiǎn)降到最低。
廣州天河區(qū)珠江新城富力盈力大廈北塔2706
020-38013166(網(wǎng)站咨詢專線)
400-001-5281 (售后服務(wù)熱線)
深圳市坂田十二橡樹莊園F1-7棟
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服務(wù)專線:400-001-5281
長(zhǎng)沙市天心區(qū)芙蓉中路三段398號(hào)新時(shí)空大廈5樓
聯(lián)系電話/ (+86 0731)88282200
品牌服務(wù)專線/ 400-966-8830
旗下運(yùn)營(yíng)網(wǎng)站:
Copyright ? 2016 廣州思洋文化傳播有限公司,保留所有權(quán)利。 粵ICP備09033321號(hào)