首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

一直不清楚:为啥Connection ResultSet要释放的呢

2012-09-09 
一直不清楚:为什么Connection ResultSet要释放的呢?一直不清楚:为什么Connection ResultSet要释放的呢?JVM

一直不清楚:为什么Connection ResultSet要释放的呢?
一直不清楚:为什么Connection ResultSet要释放的呢?JVM不是会内存回收的吗?不释放会有什么问题?

[解决办法]
有些东西是要手动显式回收的~不回收就占内存咯
[解决办法]
JVM只回收那些它认为是垃圾的内存空间,而Connection ResultSet占据的内存不被认为是垃圾内存。所以要手动清除。
[解决办法]
貌似JDK1.7 不用自己关啦~~~
[解决办法]
In some cases, it is desirable to immediately release a Connection's database and JDBC resources instead of waiting for them to be automatically released; the close method provides this immediate release.
[解决办法]
如果有很多connection,你们都等着JVM自己处理,那还不卡死了
[解决办法]
其实你可以不手动close 它,等到JVM也是一样的,但是问题在于你是数据库连接,
这个连接是非常珍贵的,可能一次查询,就占了1~n个connection。

整个网站这么多人访问,你不用完就释放,别人都连不上了!~

这个才是原因了,JVM的垃圾回收机制你不确定什么时候发生。,
[解决办法]
主动释放还是加快 Oracle /DB2 这些数据库端迟早释放。
最早的时候, while(rs.next()) { 这是向数据库询问还有没有数据,如果数据库说有,这就返回 true,这时数据库可能保持一个 cursor 或类似的资源,每滚动到下一行,就向数据库请求数据一次。这种情况下不释放是有并发的性能问题。

}

后来的驱动程序会智能地缓存数据在客户端,但具体实现肯定每个数据库都不一样。

如果等你把所有的事情都做完才关闭 Connection 时一并自动关闭 result set。

你尝试在 for 循环中执行 SQL 上万次,得到的 resultset 都不关闭的话,Oracle 会告诉你 Cursor exhaused,游标已用完了。


热点排行