java连接池原理

Java的访问数据库的机制,对于一般的应用系统而言,由于访问的数据库频率比较低,这种访问机制可以满足需求。但是在web应用系统中,用户访问量是非常大的,因此访问数据库的频率也非常大,显然这种机制承受很大的数据压力,如果还是按照这种单独创建新连接,使用后就关闭连接,由而带来的系统开销将导致性能的显著下降,甚至有可能造成内存泄漏,导致系统瘫痪。基于上述,本文提出使用数据库连接池[6],避免对于连接的任意无规则的使用,使用火速数据库连接可以得到高效安全的复用,提高系统的效率。
Java提供的数据库连接池技术思路非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库建立后,不同的数据库访问请求就可以共享这些链接,当程序中需要建立数据库连接时,只须要从连接池中取出一个来用而不用新建,使用完毕后直接放回连接池,这样通过服用这些已经建立的数据库连接,可以大大提高访问效率。
这里写图片描述

3.2 连接池的建立
首先要建立一个静态链接池,静态连接池是指在连接池中的连接在系统初始化时就已经分配好了,且不能随意关闭。其中初始化的连接按照基于XML优化参数策略来进行配置,连接池建立时,根据具体的硬件环境,软件环境和应用需求,给出一个优化的连接池连接数及一个连接可以增加到的最大连接数。
3.2.1连接池的分配策略
连接池的分配策略在实现数据库的访问机制中对性能有很大的影响,合理的分配策略可以提高连接的复用度,从而降低建立新连接的开销,同时会还可以让用户访问的速度加快[7]。连接池分有空闲池和占用池,每当用户请求一个连接时,系统首先检查空闲池是否有空闲的连接,如果有就把等待时间最长的连接分配给用户,如果没有,就等待一段时间,如果在等待时间里,有连接被释放的空闲池,则可以把这个连接分配给等待的用户。
3.2.2连接池的并发调度策略
使用一个线程定时检查连接状况,空闲池中存放没有分配使用的连接,一旦获得连接,将被放入占用池,并增加引用计数,它用来记录该链接的使用者个数。如果计数值已达到最大使用者个数,则删除此链接,是因为连接达到一定连接数后将产生不稳定的因素,影响系统安全性,同时这样也有一个很大的好处,使得可以高效地使用连接,因为如果空闲池中的连接被全部分出去后,就可以根据相应的策略从占用池中挑选出一个已经正在使用的连接来复用,策略可以采用复用计数最小的连接。毕竟复用是有限的,太多的服用会否导致过于繁忙而出现数据出错,甚至丢失数据。
由于连接池是共享资源,因此,对于改变连接池属性的操作需要进行同步处理,因此涉及到改变连接池属性的方法,都采用Java提供的同步关键字Synchronized以保持同步,保证连接池管理自身数据的一致性和连接内部数据的一致性,这样就很容易使连接管理成为线程高效的,安全的。
3.2.3连接池的释放策略
当用户用完连接后,释放数据库连接时,就将其放入到连接池的空闲池中,并设置为空闲状态,而不用去关闭它,为下一次数据库的调用做准备。当用户占用连接后,其占用时间超过额定最大的占用时间,系统则默认该用户放弃该连接,并将其放入到空闲池中,这样做可以避免内存资源浪费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值