struts2 hibernate c3p0

hibernate集成c3p0连接池,程序中connection不关闭(session不关闭)。操作一段时间后,系统无人访问时,jvm gc会不会回收connection(关闭连接,将其放入连接池);如果不会,是不是一直占用连接?

3个回答

不会,连接池的连接数只有在超出了最大空闲连接后,才会把多出来的空闲连接关闭
还有 gc和连接池关闭是两码事

iteye_15360
iteye_15360 谢谢!!!
6 年多之前 回复
suziwen
suziwen 多看看开源代码,java底层实现,内存模型等
6 年多之前 回复
iteye_15360
iteye_15360 想进一步了解这些知识点,还可以看哪方面的书,还是通过实践慢慢积累,你有什么推荐吗
6 年多之前 回复
suziwen
suziwen
6 年多之前 回复
iteye_15360
iteye_15360 如果该connection或者是session查询有几千条数据,这几千条数据占用的内存会不会释放掉?
6 年多之前 回复
suziwen
suziwen 如果你的对像没再引用,被gc掉后,该连接在连接池里就一直是活动状态 。gc掉的对像是会释放掉内存,但这个连接对于连接池来说就一直处于活动状态了
6 年多之前 回复
iteye_15360
iteye_15360 程序中一直占用的连接connection或者是session(程序中没有执行close()操作),一段时间(无人访问或引用时),gc会不会对它(即一直占用的连接connection)采取什么动作吗还是该connection会一直存在内存中,不会释放了?
6 年多之前 回复
suziwen
suziwen 先理一下关闭连接和放入连接池的概念 关闭连接是指程序与数据库连接的关闭,我们如果没有用连接池时,关闭连接就是真正断开与数据库的连接 。可能有时候混倄了关闭的概念。 在我们使用连接池时,关闭的动作是由连接池来控制的。一般起动程序后,连接池一口气就申请了好几个连接。并把他们标识为空闲。当我们的程序需要连接到数据库时,通过连接池取得那些已经申请到的空闲连接,并把他标识为非空闲。程序使用完后,再返回给连接池,连接池重新把他标识为空闲连接。 如果程序并发同时请求了很多的连接,然后连接池里的空闲连接不够,连接池就会开辟新连接给程序用,当这些程序都请求完成,这些连接就全都变成了空闲连接。如果空闲连接数超过连接池配置的最大空闲连接数,连接池就会真正关闭多余的与数据库的连接。 gc是另一层面的问题,如果对像没有了任何引用(这个你得自己看java回收引用算法),就会被释放掉。但并不会影响到连接池,你可以把他想像成全局静态变态 ,任你gc怎么发生,都不会导致连接池里的连接被关闭,除非连接池的算法有问题
6 年多之前 回复
iteye_15360
iteye_15360 jvm gc会不会回收connection(关闭连接,将其放入连接池): 这里connection是指被程序占用未关闭的连接,不是指连接池中的connection
6 年多之前 回复

JVM GC是回收“已死”的对象,根本不会去关闭连接并放入连接池的,那是c3p0要做的事情。

iteye_15360
iteye_15360 程序中占用的连接未关闭,一段时间后(系统无人访问了),如果没有引用不是“已死”的对象吗
6 年多之前 回复

看看周志明的帖子
JVM内存管理:深入Java内存区域与OOM
[url]http://www.iteye.com/topic/802573[/url]
JVM内存管理:深入垃圾收集器与内存分配策略
[url]http://www.iteye.com/topic/802638[/url]

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问