一直不清楚:为什么Connection ResultSet要释放的呢? 本帖最后由 flowerjack 于 2012-08-16 14:47:18 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JVM只回收那些它认为是垃圾的内存空间,而Connection ResultSet占据的内存不被认为是垃圾内存。所以要手动清除。 JVM回收内存不是通过判断引用数来回收的吗?这些是特例? 貌似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. 就是说不关闭,JVM还是会回收的是吧,只是会过一段时间再回收. 如果有很多connection,你们都等着JVM自己处理,那还不卡死了 找到一篇文章解释得不错:Java 用的是可达性算法,而不是计算引用数.http://www.infoq.com/cn/articles/jvm-memory-collection 其实你可以不手动close 它,等到JVM也是一样的,但是问题在于你是数据库连接,这个连接是非常珍贵的,可能一次查询,就占了1~n个connection。整个网站这么多人访问,你不用完就释放,别人都连不上了!~这个才是原因了,JVM的垃圾回收机制你不确定什么时候发生。, 主动释放还是加快 Oracle /DB2 这些数据库端迟早释放。最早的时候, while(rs.next()) { 这是向数据库询问还有没有数据,如果数据库说有,这就返回 true,这时数据库可能保持一个 cursor 或类似的资源,每滚动到下一行,就向数据库请求数据一次。这种情况下不释放是有并发的性能问题。}后来的驱动程序会智能地缓存数据在客户端,但具体实现肯定每个数据库都不一样。如果等你把所有的事情都做完才关闭 Connection 时一并自动关闭 result set。你尝试在 for 循环中执行 SQL 上万次,得到的 resultset 都不关闭的话,Oracle 会告诉你 Cursor exhaused,游标已用完了。 跪求小女子急急急急急急急急急急急急急急急急急,MAXIMO 开发中文文档,在线等。。。。。[ 有没有研究compass框架的?遇到问题了,进来一起看看 Struts中文 JAVA交流 文件管理插件 PKIX:unable to find valid certification path to requested target 两个问题,一个关于javascript,一个关于servlet 帮我看看jms这为什么错误 tomcat在linux下配置问题(windows下正常) Springboot打印SQL日志。 webservice并发访问问题 (高手请进) 数据库设计问题,在线等,急急急
Java 用的是可达性算法,而不是计算引用数.
http://www.infoq.com/cn/articles/jvm-memory-collection
这个连接是非常珍贵的,可能一次查询,就占了1~n个connection。整个网站这么多人访问,你不用完就释放,别人都连不上了!~这个才是原因了,JVM的垃圾回收机制你不确定什么时候发生。,
最早的时候, while(rs.next()) { 这是向数据库询问还有没有数据,如果数据库说有,这就返回 true,这时数据库可能保持一个 cursor 或类似的资源,每滚动到下一行,就向数据库请求数据一次。这种情况下不释放是有并发的性能问题。}后来的驱动程序会智能地缓存数据在客户端,但具体实现肯定每个数据库都不一样。如果等你把所有的事情都做完才关闭 Connection 时一并自动关闭 result set。你尝试在 for 循环中执行 SQL 上万次,得到的 resultset 都不关闭的话,Oracle 会告诉你 Cursor exhaused,游标已用完了。