本发明专利技术涉及一种面向Pool对象的弱引用实现方法,所述方法包括:通过Pool对象池分配对象,并为分配的所述对象设定唯一的标识号,所述标识号在所述对象回收至所述Pool对象池中时失效;构造弱引用访问器并将所述对象的标识号记录在所述弱引用访问器中;通过所述弱引用访问器每次访问所述对象时,检测所述弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问。采用该方法,能在Pool对象上实现弱引用机制。此外,还提供了一种面向Pool对象的弱引用实现装置。
【技术实现步骤摘要】
本专利技术涉及计算机
,特别是涉及一种面向Pool对象的弱引用实现方法和装置。
技术介绍
弱引用是主要用于程序某个模块拥有程序对象的所有权(生命周期控制权)但其他模块需要访问该对象时,用于隔离和检查所持有的引用(指针)是否有效的一种方法。传统技术中,程序对象的生命期通过引用计数控制,强引用访问器控制着计数的加减,弱引用访问器不能修改对象的引用计数。当计数不为0时对象有效,对该对象的弱引用访问器有效,当计数为0时对象生命期结束会被系统释放,弱引用访问器失效。每个对象的弱引用访问器维护在每个对象绑定的弱引用列表中,当对象被真正释放时修改该列表中的访问器状态从而使其失效。然而,传统的这种弱引用实现方法并不能适用于Pool对象,Pool对象是指被分配在内存池中可以被反复申请使用和归还的程序对象,对于加快内存访问和减少内存碎片很有用处。对于Pool对象,对象受对象池管理,对象的引用计数最小是1,因此对象不会被释放,也就无法让弱引用访问器失效。
技术实现思路
基于此,有必要针对上述技术问题,提供一种能在Pool对象上实现弱引用机制的面向Pool对象的弱引用实现方法和装置。一种面向Pool对象的弱引用实现方法,所述方法包括:通过Pool对象池分配对象,并为分配的所述对象设定唯一的标识号,所述标识号在所述对象回收至所述Pool对象池中时失效;构造弱引用访问器并将所述对象的标识号记录在所述弱引用访问器中;通过所述弱引用访问器每次访问所述对象时,检测所述弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问。一种面向Pool对象的弱引用实现装置,所述装置包括:对象分配模块,用于通过Pool对象池分配对象,并为分配的所述对象设定唯一的标识号,所述标识号在所述对象回收至所述Pool对象池中时失效;访问器构造模块,用于构造弱引用访问器并将所述对象的标识号记录在所弱引用访问器中;对象访问模块,用于通过所述弱引用访问器每次访问所述对象时,检测所述弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问。上述面向Pool对象的弱引用实现方法和装置,通过Pool对象池分配对象,在分配对象时为分配的对象设定唯一的标识号,构造弱引用访问器时将对象的标识号记录在弱引用访问器中,这样,弱引用访问器每次访问对象时,检测弱引用访问器中记录的标识号是否与对象携带的标识号一致,若是,则允许访问,否则不允许访问。由于对象分配时为对象设定唯一的标识号,且该标识号在对象回收至Pool对象池中时失效,从而实现对象回收是弱引用访问器失效的目的。相对于传统的引用计数方式,该方法和装置可以适用于Pool对象,实现Pool对象的弱引用机制。附图说明图1为一个实施例中面向Pool对象的弱引用实现方法的流程图;图2为另一个实施例中面向Pool对象的弱引用实现方法的流程图;图3为一个实施例中面向Pool对象的弱引用实现方法的实现框架图;图4为一个实施例中面向Pool对象的弱引用实现方法的时序图;图5为一个实施例中面向Pool对象的弱引用实现装置的结构框图;图6为另一个实施例中面向Pool对象的弱引用实现装置的结构框图;图7为一个实施例中服务器的内部结构图。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本专利技术,并不用于限定本专利技术。如图1所示,在一个实施例中,提供了一种面向Pool对象的弱引用实现方法,该方法适用于Pool对象,使Pool对象能够实现弱引用机制。该方法包括:步骤102,通过Pool对象池分配对象,并为分配的对象设定唯一的标识号,该标识号在对象回收至Pool对象池中时失效。对象是指计算机中对事物概念、数据等的抽象表达,是一种资源,需分配一定的内存资源来进行记录。Pool对象是指被分配在内存池中可以被反复申请使用和归还的程序对象。Pool对象池是Pool对象的管理器,Pool对象池可维护一个空闲对象的列表,当需要分配对象时为对象拥有者分配一个对象。在分配对象时为分配的对象设定唯一的标识号,该标识号在对象的生命续存期间有效,在对象回收至Pool对象池中时失效,对象被访问时携带对应的标识号。步骤104,构造弱引用访问器并将对象的标识号记录在弱引用访问器中。访问器是对程序对象的访问承载者,可以是指针、智能指针、强引用和弱引用等。弱引用是指程序某个模块拥有程序对象的所有权但其他模块需要访问该对象时,用于隔离和检查所持有的引用或指针是否有效的一种方法。弱引用访问器是对弱引用方法的封装,可以提供与被访问对象间的有效性判断和访问接口。在构造弱引用访问器时需要将分配的对象传递给弱引用访问器,具体的可将对象的指针和携带的标识号传递给弱引用访问器,弱引用访问器获取该对象的标识号,将该对象的标识号记录在弱引用访问器中。步骤106,通过弱引用访问器每次访问对象时,检测弱引用访问器中记录的标识号是否与对象携带的标识号一致,若是,则允许访问,否则不允许访问。本实施例中,在对象被释放前是对象的生命续存期间。由于弱引用访问器提供了与被访问的对象的有效性判断和访问接口,在对象的生命续存期间,弱引用访问器每次访问对象时,都会对标识号进行有效性判断。具体的,检测若引用访问器中记录的标识号是否与对象携带的标识号一致,若是,则允许访问,否则不允许访问,弱引用访问器失效。本实施例中,通过Pool对象池分配对象,在分配对象时为分配的对象设定唯一的标识号,构造弱引用访问器时将对象的标识号记录在弱引用访问器中,这样,弱引用访问器每次访问对象时,检测弱引用访问器中记录的标识号是否与对象携带的标识号一致,若是,则允许访问,否则不允许访问。由于对象分配时为对象设定唯一的标识号,且该标识号在对象回收至Pool对象池中时失效,从而实现对象回收是弱引用访问器失效的目的。相对于传统的引用计数方式,该方法和装置可以适用于Pool对象,实现Pool对象的弱引用机制。在一个实施例中,上述面向Pool对象的弱引用实现方法还包括:当回收对象时设置对象携带的标识号为无效值,将对象归还至Pool对象池中。当对象拥有者需要回收对象时可调用对象的相应接口,该接口将对象携带的标识号设置成无效值。具体的,可以更改对象所携带的标识号,这样,弱引用访问器记录的标识号与对象携带的标识号则变为不同,弱引用访问器不能访问对象。在一个实施例中,构造弱引用访问器并将对象的标识号记录在弱引用访问器中,包括:构造弱引用访问器,将对象的指针保存在弱引用访问器中,以及将对象的标识号保存在弱引用访问器的标识号变量中。这样,便可以将对象的标识号记录在弱引用访问器中。进一步的,在一个实施例中,检测弱引用访问器中记录的标识号是否与对象携带的标识号一致,若是,则允许访问,否则不允许访问,包括:检测被访问的对象的指针是否不为空且弱引用访问器中记录的标识号是否与对象携带的标识号一致,若是,则允许访问,否则不允许访问。本实施例中,被访问对象的指针不为空,则表明对象实际存在,进一步判断弱引用访问器中记录的标识号是否与对象携带的标识号一致,如果一致,则表明弱引用访问器未本文档来自技高网...
【技术保护点】
一种面向Pool对象的弱引用实现方法,所述方法包括:通过Pool对象池分配对象,并为分配的所述对象设定唯一的标识号,所述标识号在所述对象回收至所述Pool对象池中时失效;构造弱引用访问器并将所述对象的标识号记录在所述弱引用访问器中;通过所述弱引用访问器每次访问所述对象时,检测所述弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问。
【技术特征摘要】
1.一种面向Pool对象的弱引用实现方法,所述方法包括:通过Pool对象池分配对象,并为分配的所述对象设定唯一的标识号,所述标识号在所述对象回收至所述Pool对象池中时失效;构造弱引用访问器并将所述对象的标识号记录在所述弱引用访问器中;通过所述弱引用访问器每次访问所述对象时,检测所述弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:当回收所述对象时设置所述对象携带的标识号为无效值,将所述对象归还至所述Pool对象池中。3.根据权利要求1所述的方法,其特征在于,所述构造弱引用访问器并将所述对象的标识号记录在所述弱引用访问器中,包括:构造弱引用访问器,将所述对象的指针保存在所述弱引用访问器中,以及将所述对象的标识号保存在所述弱引用访问器的标识号变量中。4.根据权利要求3所述的方法,其特征在于,所述检测弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问,包括:检测被访问的所述对象的指针是否不为空且所述弱引用访问器中记录的标识号是否与所述对象携带的标识号一致,若是,则允许访问,否则不允许访问。5.根据权利要求1至4任一项所述的方法,其特征在于,所述标识号为...
【专利技术属性】
技术研发人员:邓君,
申请(专利权)人:腾讯科技成都有限公司,
类型:发明
国别省市:四川;51
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。