2013-05-09 46 views
0

我最近發現(通過JMAP +與jHat),我的應用程序是 泄漏 存儲許多情況下com.mysql.jdbc.Field
的粘實例 - 我仔細檢查了我的代碼,以確保我關閉所有PreparedStatements,找到一些缺失,但沒有改變結果。
- 一些PreparedStatement的創建和關閉馬上
- 其他幾個人創建了啓動和重複使用多次
- 我使用org.apache.tomcat.jdbc.pool.DataSource作爲連接池

什麼會導致這種類型的行爲?Java類com.mysql.jdbc.Field聚集

回答

1

是否使用關閉所有的預處理語句/結果集:

PreparedStatement stmt (possible assignment here); 
try 
{ 
// do all work with prepared statement 
ResultSet rs; 
try 
{ 
    while (rs.next()) ... 
    // process results 
} 
finally 
{ 
    rs.close(); 
} 
} 
finally 
{ 
    stmt.close(); 
} 

這樣就保證完成時(無論例外)所有結果集被關閉,所有語句都被關閉(不考慮例外) ?顯然還有其他的方法來寫,但這個想法是一樣的。

如果你正在做所有的事情,那麼除非你有這麼多的引用,它佔用了過多的內存,這幾乎肯定沒問題,沒有什麼需要去做。

+0

對我感到羞恥。一些PreparedStatement確實沒有關閉。 – MonoThreaded 2013-05-09 15:30:30