如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2012年3月21日

程式設計造成Memory Leak的原因與預防的方法

作者: Fred Wang (FW知識瑣記) 日期: 2012/3/21

程式設計造成Memory Leak的原因

1.沒有自動記憶體管理的程式語言 : C與C++
- 程式中沒有撰寫垃圾回收的機制。

2.在自動記憶體管理環境下執行的程式語言 : Java,C#,VB.NET,Javascript等
-記憶體管理器可以回復不能存取的記憶體,但它不可以釋放仍有可能需要使用的記憶體。
-部分系統記憶體管理有瑕疵,例如 : IE
-要防止此類記憶體泄漏,開發者必須自行增加物件回收處理機制

解決方法
1.使用Garbage Collection機制
-採用具備Garbage Collection平台或工具。
-將此機制設計於自製的系統中。

2.應用程式開發過程中,應隨時注意釋放不再使用的物件
-即使有Garbage Collection機制的平台,仍無法100%避免Memory Leaks,請參考 : Java, ABAP, VB memory leak preventation 相關文章
-確定C程式中每個malloc()有相對的free()
-Coding過程寫下您Create的物件,在紙上或Text file,例如: display.newImage() … ,程式或模組結束前,關閉此物件。

3.使用工具檢查程式中是否存在memory leaks的可能
- At compile-time的檢查如static analysis工具
- 例如 : Oracle(WebLogic) JRockit Tools

4.使用工具測試程式執行是否造成memory leaks的情況
- At run-time的檢查如dynamic analysis工具

5.使用工具檢查與監控系統memory leaks的情況
-隨時監控。
-結合發送eMail機制(系統內含或3rd Party Tool)自動傳送警訊給管理人員。
-例如 : Windows Performance Monitor(perfmon)

6.注意系統版本的更新(patch)

沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)