不看代码了,我们看内存消耗以及CPU的使用情况
首先是一个使用Proxy委托,进行Connection行为拦截,并在其中建立了守护线程,进行监听,当空闲时间过长将对连接进行关闭,如果用户没有显示的调用close方法,而重新调用方法创建连接就重新建立连接


看下效果
测试使用检测为400毫秒,活动时间4000

ConnectionFactory factory = NormalConnectionFactory.getInstance(connStr);
        Runtime r 
= Runtime.getRuntime();
        
long im;
        im 
= r.freeMemory();
        Connection conn 
= factory.createConnection();
//        Connection conn1 = factory.createConnection();
//        Connection conn2 = factory.createConnection();
//        Connection conn3 = factory.createConnection();
//        Connection conn4 = factory.createConnection();
        System.out.println((im - r.freeMemory()) / 1024);
        
while(true){
            Thread.sleep(
3000);
        }
这是创建一个连接的结果(单位为KB)
886
OK,我们看下多几个连接的结果
1047
由此可以看出建立第一个连接花掉了大部分的内存,因为要加载类
使用一般只建立一个连接使用的内存
628
使用一般连接,建立5个连接
742
由此可以看出,内存的消耗是不可忽视的,但是这样有数据库的优化,因为老板一般不会购买好的数据库。。。so
下面看看cpu
第一是,我看不到CPU占用的情况,因为现在的CPU太强大,一直保持%0,那么我们只能看创建使用的时间

首先是创建300个连接用时
create start
6366
create over

create start
6519
create over

create start
6828
create over

连续的三次测试创建

下面是一般连接用时
create start
6748
create over

create start
6321
create over

create start
5960
create over

不得不说,创建一般连接用时上有一定的优势,但是使用守护线程的情况下,CPU的占用基本可以忽略

总结来说,这样的连接是有优势的
1.我们可以避免Close没有调用而带来的数据库风险
2.我们可以节约数据库的连接,如果配合数据库连接池使用那将对数据库的连接使用的更加合理

OK,等待数据库连接池写完之后,我会将这一块全部发出来