尽管c3p0在maxIdleTime之后删除了一个连接,但它会将其添加到BasicResourcePool中名为前Resources的内部weakHashMap中。该映射通过JDBC4Connection对象堆积在堆上,仅在GC上清除。是否可以选择退出此类收集,或者这种收集有明显的优势吗?

最佳答案

previousResources的目的只是允许c3p0资源的检入是幂等的,而同时对外部资源的检入(池从未见过的连接)会发出警告。

实际上,对于大多数c3p0用户而言,很难在此级别签入外部资源。 BasicResourcePool被埋在代理下面,然后是C3P0ConnectionPool对象。但是BasicResourcePool本身打算被普遍使用,可能在c3p0之外。 “检入”外部资源可能意味着存在重大漏洞,因此“检入”的资源既不会由池管理,也不会被真正破坏。因此,发生这种情况时,BasicResourcePool警告很重要。但同样重要的是,如果用户多次签入同一资源,则c3p0也不要发出警告:我们希望允许客户端在过度签入方面犯错(因为池可以忽略第二次签入,但如果根本无法签到,则意味着资源泄漏。因此,c3p0必须能够区分曾经管理但现在已清除的资源(不要警告,额外的检入是有用的警告)与从未管理过的资源(必须警告,可能是编程错误和资源泄漏)之间的区别)。

这有任何意义吗?

关于mysql - c3p0桩连接对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22531886/

10-10 22:29