差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
java:basic:memoryleakwithproperties [2013/02/24 23:06] tony |
java:basic:memoryleakwithproperties [2017/03/28 22:24] tony |
||
---|---|---|---|
行 1: | 行 1: | ||
{{tag>java}} | {{tag>java}} | ||
====== 使用Properties類別的Memory Leak ====== | ====== 使用Properties類別的Memory Leak ====== | ||
- | 使用Properties類別來儲存組態設定是非常方便的事情。即使是知名的java語言教學,在建立檔案串流物件上,也常常忘記關閉它而造成記憶體遺失。好加在的是,這樣的錯誤可以find bug工具程式去發現。首先讓我說明問題所在: | + | ===== Problem ===== |
+ | 使用Properties類別來儲存組態設定是非常方便的事情。在某個知名java教學網站中,在使用Properties建立串流物件上,也有因忘記關閉它而造成Leak。舉例來說: | ||
<code java> | <code java> | ||
private void load(){ | private void load(){ | ||
行 20: | 行 21: | ||
} | } | ||
</code> | </code> | ||
- | 上面程式碼的問題就在於**FileInputStream**與**FileOutputStream**建構後,完全沒做close的動作。相信在執行多次後,應該會開始出現效能下降或根本無法存取的問題。修改方法也相當簡單: | + | 上面程式碼問題就在於**FileInputStream**與**FileOutputStream**建構後,沒做close stream的動作。在執行多次後,應會開始出現效能下降或根本無法存取的問題。(可以透過findbug去檢查出來) |
+ | ===== How to? ===== | ||
+ | 修改方法也相當簡單: | ||
<code java> | <code java> | ||
private void close(Closeable closable){ | private void close(Closeable closable){ |