2013-05-09 73 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