既然你已經(jīng)知道你的程序有內(nèi)存泄漏,那么當泄漏成為問題時,你可以使用這些工具來幫助修復泄漏——最好是在泄漏成為問題之前。很多人都選擇參加java培訓來獲得更全面的學習,有專業(yè)老師教學指導,理論知識+實戰(zhàn)項目一起學習,可以快速提升自己。
使用可以檢測內(nèi)存泄漏的工具
對于我們的下一個例子,我們將使用VisualVM。
下載并配置VisualVM后,通過運行附加了VisualVM的應用程序來分析你的代碼。當執(zhí)行降低應用程序速度的任務時,VisualVM會查看“監(jiān)視器”和“內(nèi)存池”選項卡。你需要注意什么?當你在Monitor選項卡中看到內(nèi)存使用高峰時,按下“Perform GC”按鈕,這將激活垃圾收集。這應該有助于減少使用的內(nèi)存量。
如果這不起作用,切換到“內(nèi)存池”并查看舊的Gen部分。如果有物體泄漏,你會在這里看到。請記住,活動對象被放置在“伊甸園”,然后將被移動到“幸存者”。同時,在“老一代”池中發(fā)現(xiàn)較老的對象。
在這一點上,你可以回到你的代碼并注釋掉不相關(guān)的部分,直到你注意到有性能下降或停止的地方。重復所有這些步驟,直到消除所有泄漏。如果你正在考慮如何快速學習java,那么參加java培訓掌握更全面的知識和技能將是一個很好的開始。
啟用代碼的某些部分來檢查內(nèi)存使用情況,如果你發(fā)現(xiàn)另一個泄漏,進入導致這些泄漏的方法來幫助堵塞它。繼續(xù)縮小范圍,直到只剩下一個類或方法。驗證所有文件緩沖區(qū),看它們是否關(guān)閉。另外,檢查所有的散列表,看看你是否正確地使用了它們。
使用堆轉(zhuǎn)儲
如果你覺得上面提到的方法太單調(diào)乏味,你可以通過使用堆轉(zhuǎn)儲來減少修復內(nèi)存泄漏所花費的時間。堆轉(zhuǎn)儲允許你查看打開的實例數(shù)量以及這些實例占用了多少空間。如果你想進一步調(diào)查某個特定的實例,只需雙擊該特定的實例就可以看到更多信息。堆轉(zhuǎn)儲幫助你了解應用程序生成了多少對象。在java培訓中,無論是理論知識,還是實戰(zhàn)項目,都是緊跟市場和企業(yè)需求的,讓你掌握最新技術(shù),走在市場前沿。
使用Eclipse內(nèi)存泄漏警告
另一種節(jié)省時間的方法是依靠Eclipse內(nèi)存泄漏警告。如果你有符合JDK 1.5或更高版本的代碼,你可以使用Eclipse在引用結(jié)束但對象持續(xù)存在且未關(guān)閉時發(fā)出警告。請確保在項目設置中啟用泄漏檢測。
請注意,使用Eclipse可能不是一個全面的解決方案。Eclipse不能檢測所有的泄漏,可能會遺漏一些文件閉包,尤其是當你的代碼不符合JDK 1.5(或更高版本)時。Eclipse不總是工作的另一個原因是因為這些文件的關(guān)閉和打開嵌套得非常深。
總結(jié)
內(nèi)存泄漏當然是Java開發(fā)人員的一個擔憂,但它們并不總是世界末日。用專業(yè)知識武裝自己,在問題發(fā)生之前就加以預防,并在問題出現(xiàn)時加以解決。想學習java的同學建議通過參加java培訓來提升自己,在專業(yè)老師的指導下,可以獲得很大進步。