当前位置: 技术问答>java相关
那位牛人可以说说实例池的原理和实现??
来源: 互联网 发布时间:2015-11-15
本文导语: u p | 我不是什么牛人,不过还是简单介绍一下我的想法吧,所谓的实例池,无非就是在内存中存在多个实例,这些实例的状态完全相同,有些类可能在创建实例的时候需要很多时间,对于有...
u p
|
我不是什么牛人,不过还是简单介绍一下我的想法吧,所谓的实例池,无非就是在内存中存在多个实例,这些实例的状态完全相同,有些类可能在创建实例的时候需要很多时间,对于有大量用户访问的系统来说,如果每个用户访问都要花费几秒钟创建新的实例显然不是一种好的做法,而且当用户使用完实例后又要释放资源这又要占用系统的大量时间。说了这么多,实例池无非是为了节省创建实例和卸载实例所需要的时间,另外,有些实例是有状态的,当某个用户访问时间以后,由于某种原因离开了,这样系统将保存用户的状态,将实例放入池中,当用户再次使用的时候系统将从池中选出一个实例,并且恢复他的状态。总之是减少创建和删除实例所花费的时间。
|
我补充一下study_body(珍惜每一天)说的,我也没做过,不过想来和连接池差不多
首先,在池初始化的时候生成一堆实例,并且置它们的状态为空闲。
比如,我们可以用对象数组存放实例,用另一个字符串数组存放状态。这样,我们通过下标就可以得到实例和它的状态。
用户调用一个实例的时候,遍历状态数组,如果找到一个空闲的实例,把他返回给用户,并置状态为使用。如果没有找到空闲的,或者让用户等待,或者再生成一个新的实例,加入实例数组,然后返回给用户,并置状态为使用。
在一般使用的时候,刚开始生程一定数量的实例,不够用的时候再增加。但是有一个上限值,超过上限,还没有空闲的实例,就应该让用户等待。
然后,用户用完以后,一定要释放实例。把这个实例再次置为空闲,把这个实例的所有内容清空(也就是让他看上去和new出来的一模一样)。
大致上应该就像这样。
首先,在池初始化的时候生成一堆实例,并且置它们的状态为空闲。
比如,我们可以用对象数组存放实例,用另一个字符串数组存放状态。这样,我们通过下标就可以得到实例和它的状态。
用户调用一个实例的时候,遍历状态数组,如果找到一个空闲的实例,把他返回给用户,并置状态为使用。如果没有找到空闲的,或者让用户等待,或者再生成一个新的实例,加入实例数组,然后返回给用户,并置状态为使用。
在一般使用的时候,刚开始生程一定数量的实例,不够用的时候再增加。但是有一个上限值,超过上限,还没有空闲的实例,就应该让用户等待。
然后,用户用完以后,一定要释放实例。把这个实例再次置为空闲,把这个实例的所有内容清空(也就是让他看上去和new出来的一模一样)。
大致上应该就像这样。