java.util.Hashtable$Entry (33%)
com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty (13%)
com.mysql.jdbc.ConnectionPropertiesImpl$StringConnectionProperty (3%)
com.mysql.jdbc.ConnectionPropertiesImpl$IntegerConnectionProperty (3%)
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = ...;
stmt = ...;
ResultSet rs = ...;
rs.useIt();
}
finally {
if (stmt != null) { stmt.close(); }
if (conn != null) { conn.close(); }
}
-----------更新-------------------------------------
我已经更改了ResultSet的所有实例,以便立即关闭它们,并在finally{}块中关闭它们,就像我的Connection和PreparedStatement实例一样。不过,这似乎没有帮助,记忆力一直在增长。
我又探了几圈,注意到了这个班:
com.mysql.jdbc.JDBC4Connection
public class DsHelper {
private static DsHelper sInstance;
private DataSource mDs;
public DsHelper() {
InitialContext ctx = new InitialContext();
mDs = (DataSource)ctx.lookup("java:comp/env/jdbc/myds");
}
public static DsHelper get() {
if (sInstance == null) {
sInstance = new DsHelper();
}
return mInstance;
}
public DataSource getDataSource() {
return mDs;
}
}
使用它:
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
{
Connection conn = null;
try {
conn = DsHelper.get().getDataSource();
...
}
finally {
if (conn != null) { conn.close(); }
}
}
众所周知,ResultSet泄漏非常常见。明确地关闭它们是一个非常好的主意,值得你为努力做到这一点而付出的每一点麻烦。去做吧!说真的。
不同的VM实现处理垃圾收集的方式不同。这可能就是为什么你在新环境中看到东西堆积的原因。
在Oracle上,ResultSet对象反映了稀缺的服务器资源(游标),如果不显式关闭它们,最终服务器将耗尽,其他连接的工作将开始失败。
我正在使用Eclipse,并执行下面的函数,碰巧我打开了一个扫描器,然后,最后我关闭了它,但Eclipse一直说它没有关闭“资源泄漏:'Scanner'没有关闭”。我可以用try with resources来完成,警告消失了,但我想知道为什么我在这里尝试的方式不起作用
为什么Eclipse在下面的代码中给了我变暖的“资源泄漏:'in'从不关闭”?
此代码导致资源泄漏: conin从未关闭 为什么会发生这种情况?我如何修复它?
Eclipse显示警告消息,表示"资源泄漏,准备好的语句未在以下位置关闭" 在我看来,finally块负责关闭preparedstatement和rs对象。你知道为什么eclipse还在抱怨资源泄漏吗?
当我创建扫描仪时,似乎出现了这个错误。我试图通过搜索错误名称来解决这个问题,但到目前为止未能成功地让消息停止出现。 代码: 我得到错误的部分:
我正在编写一个程序,希望控制台输出用户输入的数字的剩余部分。但是,每次我编译代码时,控制台都会打印出来,我得到以下控制台错误: 我不确定控制台所说的“资源泄漏”是什么意思。我在几个不同的地方查找过它(包括API和其他堆栈溢出问题),我不确定为什么没有打印到控制台。我正在使用DrJava程序,以防有人想知道。 这里是我的代码供参考: