包括缓存对象包装单元和缓存对象管理单元, 缓存对象包装单元:使用弱引用包装淘汰的缓存对象的值; 缓存对象管理单元:接收包装对象的值,并在弱引用字典管理器内查找是否存在对应 缓存对象的Key,如存在则使用包装对象替换掉弱引用字典管理器内对应的缓存对象,如不 存在,则将包装对象加入到弱引用字典管理器,包装对象即使用弱引用包装的淘汰的缓存 对象。
[0025] 如图3所示,缓存对象获取器包括,缓存区域获取单元和弱引用字典获取单元; 缓存区域获取单元:在缓存区域内获取缓存对象; 弱引用字典获取单元:在弱引用字典管理器内获取缓存对象。
[0026] 弱引用字典获取单元获取缓存对象具体为: 通过缓存对象的Key检索弱引用字典管理器; 如弱引用字典管理器内存在对应的包装对象,则检测包装对象所引用的内存对象是否 存活; 如管理器存活则返回存活的内存对象。
[0027] 如图4所示,一种通过弱引用技术消除缓存对象不一致性的方法,包括以下步骤: 将缓存区域内淘汰的缓存对象加入到弱引用字典的步骤; 以及 获取缓存对象时,首先获取缓存区域内保存的缓存对象,如缓存区域中获取不到缓存 对象,则从弱引用字典中获取缓存对象的步骤。
[0028] 本发明技术方案中的Key即为键。Key是系统根据弱引用包装淘汰的缓存对象的 值生成的索引代码。
[0029]本发明技术方案解决技术问题的关键是引入WeakReference弱引用技术,这是支 持垃圾回收技术的现代程序语言所共有的一种机制(例如Java和C#)。通过WeakReference 引用的对象,只有当内存中不再存在强引用关系的时候(强引用的典型例子是局部变量或 静态变量),才可以被垃圾回收。这一特性,恰好可用于探测缓存对象是否还在被其它程序 代码所使用。
[0030]本发明的关键技术为: 1. 增加弱引用字典管理器对象(key-value格式)。
[0031] 2. 修改缓存对象的淘汰方法,增加将淘汰的缓存对象加入到弱引用字典中,具体如图 5所示。
[0032] 3.修改获取缓存对象的方法,若缓存区域中获取不到对象,则增加从弱引用字典 中检索存活内存对象,具体如图6所示。
[0033] 最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明, 尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可 以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。
【主权项】
1. 一种通过弱引用技术消除缓存对象不一致性的装置,其特征在于,包括弱引用字典 管理器、缓存对象管理器和缓存对象获取器, 所述缓存对象管理器:将缓存区域内淘汰的缓存对象加入到弱引用字典管理器; 所述弱引用字典管理器:保存来自缓存对象管理器的缓存对象; 所述缓存对象获取器:在获取缓存对象时,首先获取缓存区域内保存的缓存对象,如缓 存区域中获取不到缓存对象,则从弱引用字典管理器中获取缓存对象。2. 根据权利要求1所述的通过弱引用技术消除缓存对象不一致性的装置,其特征在 于,所述弱引用字典管理器采用key-value格式。3. 根据权利要求1或2所述的通过弱引用技术消除缓存对象不一致性的装置,其特征 在于,所述缓存对象管理器,包括缓存对象包装单元和缓存对象管理单元, 所述缓存对象包装单元:使用弱引用包装淘汰的缓存对象的值; 所述缓存对象管理单元:接收包装对象的值,并在弱引用字典管理器内查找是否存在 对应缓存对象的key,如存在则使用包装对象替换掉弱引用字典管理器内对应的缓存对象, 如不存在,则将包装对象加入到弱引用字典管理器,包装对象即使用弱引用包装的淘汰的 缓存对象。4. 根据权利要求1或2所述的通过弱引用技术消除缓存对象不一致性的装置,其特征 在于,所述缓存对象获取器包括,缓存区域获取单元和弱引用字典获取单元; 所述缓存区域获取单元:在缓存区域内获取缓存对象; 弱引用字典获取单元:在弱引用字典管理器内获取缓存对象。5. 根据权利要求4所述的通过弱引用技术消除缓存对象不一致性的装置,其特征在 于,所述弱引用字典获取单元获取缓存对象具体为: 通过缓存对象的key检索弱引用字典管理器; 如弱引用字典管理器内存在对应的包装对象,则检测包装对象所引用的内存对象是否 存活; 如管理器存活则返回存活的内存对象。6. -种通过弱引用技术消除缓存对象不一致性的方法,其特征在于,包括以下步骤: 将缓存区域内淘汰的缓存对象加入到弱引用字典的步骤; 以及 获取缓存对象时,首先获取缓存区域内保存的缓存对象,如缓存区域中获取不到缓存 对象,则从弱引用字典中获取缓存对象的步骤。7. 根据权利要求6所述的通过弱引用技术消除缓存对象不一致性的方法,其特征在 于,所述弱引用字典采用key-value格式。8. 根据权利要求6或7所述的通过弱引用技术消除缓存对象不一致性的方法,其特征 在于,所述将缓存区域内淘汰的缓存对象加入到弱引用字典的步骤包括: 使用弱引用包装淘汰的缓存对象的值的步骤; 根据包装对象的值在弱引用字典内查找是否存在对应缓存对象的key,如存在则使用 包装对象替换掉弱引用字典内对应的缓存对象,如不存在,则将包装对象加入到弱引用字 典的步骤。9. 根据权利要求6或7所述的通过弱引用技术消除缓存对象不一致性的方法,其特征 在于,所述从弱引用字典中获取缓存对象包括, 通过缓存对象的Key检索弱引用字典; 如弱引用字典内存在对应的包装对象,则检测包装对象所引用的内存对象是否存活; 如管理器存活则返回存活的内存对象。
【专利摘要】本发明公开了一种通过弱引用技术消除缓存对象不一致性的装置和方法,其中,通过弱引用技术消除缓存对象不一致性的装置,包括弱引用字典管理器、缓存对象管理器和缓存对象获取器,所述缓存对象管理器:将缓存区域内淘汰的缓存对象加入到弱引用字典管理器;所述弱引用字典管理器:保存来自缓存对象管理器的缓存对象;所述缓存对象获取器:在获取缓存对象时,首先获取缓存区域内保存的缓存对象,如缓存区域中获取不到缓存对象,则从弱引用字典管理器中获取缓存对象。以解决缓存对象不一致的问题。
【IPC分类】G06F9/45
【公开号】CN105404541
【申请号】CN201510768936
【发明人】张红斌
【申请人】用友网络科技股份有限公司
【公开日】2016年3月16日
【申请日】2015年11月12日