用于内存复制系统进行垃圾回收的方法和系统的制作方法

文档序号:6603636阅读:162来源:国知局
专利名称:用于内存复制系统进行垃圾回收的方法和系统的制作方法
技术领域
本发明涉及垃圾回收,特别涉及用于内存复制系统进行垃圾回收的方法和系统。
背景技术
为了提供内存的高可用性(high availability)和故障时接管(failover),应用服务器通常提供内存复制(in-memory replication)机制,例如Oracle Coherence, Sun GlassFish Enterprise krver等产品。内存复制的基本原理是,把一个节点服务器内存中的数据备份k(k>= 1)份到其它节点服务器中,当前工作的数据成为主数据(primary data),备份的k份数据成为复制数据(r印lica data)。当主数据因为某种原因,例如,在当前工作的服务器死机导致网络临时受损的情况,复制数据就会被利用充当主数据,且能够实时地接管主服务器的任务。基于java,C#以及大多数脚本语言等程序语言实现的内存复制系统通常利用垃圾回收(Gartage Collection)机制进行内存管理,垃圾回收器进行垃圾回收时,检查出不再被应用程序使用的数据对象并执行必要的操作来回收它们占用的内存。垃圾回收机制通常包括标记拷贝方法(Mark-Copy)和标记清除方法(Mark-Swe印),在这两种方法中都需要先进行标记操作,标记操作的任务是从根节点开始遍历堆上所有的数据对象,在每个它所发现的存活的数据对象都加上标记,直至遍历完毕,没有被标记的数据对象就是垃圾。在标记拷贝方法中,将所有存活的数据对象拷贝至另一个新堆(动态内存空间),未被拷贝的都是垃圾,原有存储空间被整体回收释放。在标记清除方法中,直接清除回收没有被标记的数据对象。然而由于标记操作必须遍历整个堆,因此需要花费大量的时间和计算资源,而在内存复制系统中进行垃圾回收的标记操作时,由于各个节点服务器执行环境(例如JVM)彼此独立地进行垃圾回收,因此需要对(k+Ι)个数据片各自独立地进行标记操作,极大地浪费了各个节点服务器上的CPU计算资源,尤其在节点服务器重负载的情况下,甚至直接导致节点服务器过载。因此,内存复制系统需要一种高效的垃圾回收方法,从而节省节点服务器的计算资源和时间开销。

发明内容
基于上述问题,本发明提供一种用于内存复制系统进行垃圾回收的方法和系统。根据本发明的第一方面,提供一种用于内存复制系统的节点服务器进行垃圾回收的方法,该方法包括响应于垃圾回收被触发,判断是否存在从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息;以及响应于判断结果为是,利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收。根据本发明的第二方面,提供一种用于内存复制系统的节点服务器进行垃圾回收的系统,该系统包括判断装置,被配置为响应于垃圾回收被触发,判断是否存在从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息;以及垃圾回收辅助装置,被配置为响应于判断结果为是利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收。在根据本发明实施例的内存复制系统中,其他节点服务器利用进行垃圾回收的节点服务器发送的可回收数据对象的标识信息对可回收的数据对象进行垃圾回收,节省了进行标记操作的计算资源和时间开销,从而提高了内存复制系统进行垃圾回收的效率。


结合附图,通过参考下列详细的示例性实施例的描述,将会更好地理解本发明本身、优选的实施方式以及本发明的目的和优点,其中图1示出根据本发明实施例的内存复制系统的示意图;图2示出根据本发明实施例内存复制系统节点服务器进行垃圾回收的方法;图3示出根据本发明实施例内存复制系统节点服务器进行垃圾回收的流程图;图4示出根据本发明的实施例内存复制系统进行垃圾回收的实例;以及图5示出根据本发明实施例内存复制系统节点服务器进行垃圾回收的框图。
具体实施例方式以下结合附图描述根据本发明实施例的用于内存复制系统中的垃圾回收的方法和系统,将会更好地理解本发明的目的和优点。图1示出根据本发明实施例的内存复制系统示意图,如图所示,内存复制系统包括多个节点服务器,通过内存复制机制将当前节点服务器中待存储的数据切分为多个数据片,每个数据片包括多个数据对象,每个数据对象被复制成k个对应的复制数据对象分发到一个或多个其它节点服务器中,如果当前节点服务器中的数据对象不可用的时候,其它服务器节点中的复制数据对象会实时地接管其任务。图2示出根据本发明实施例的用于内存复制系统的节点服务器进行垃圾回收的方法,该方法包括在步骤S201,响应于垃圾回收被触发,判断是否存在从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息;以及在步骤S202,响应于判断结果为是,利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收。具体地,图3示出了根据本发明实施例的用于内存复制系统节点服务器进行垃圾回收的流程图。在步骤S301,内存复制系统节点服务器中的垃圾回收被触发,以JVMCJava虚拟机)为例,在JVM所管理的空闲内存空间过少或者连续空闲内存空间过小,JVM不能从堆 (Heap)上为对象分配内存空间时,JVM会发出内存分配错误,由此激活垃圾回收器进行垃圾回收。在步骤S302,判断是否存在从其它节点服务器接收的可被垃圾回收的数据对象的标识信息。如果判断结果为否,则在步骤S305,利用现有的垃圾回收机制对所述内存复制系统节点服务器的数据对象进行垃圾回收。具体地,由于各个节点服务器彼此独立的进行垃圾回收,在利用现有的垃圾回收机制例如标记拷贝方法(Mark-Copy)和标记清除方法 (Mark-Sweep)对节点服务器的数据对象进行垃圾回收的过程中,各个节点服务器各自监视其上数据对象的标记(Mark)操作,标记操作的任务是从应用程序的根节点出发,利用相互引用关系,遍历其在堆(heap)上动态分配的所有数据对象,在每个它所发现的存活的数据对象都加上标记,例如用“ 1,,来标记存活的对象,直至遍历完毕,没有被标记的数据对象就是可回收的数据对象。接着在步骤S306,获取垃圾回收过程中可被垃圾回收的数据对象的标识信息。根据本发明的一个实施例,在内存复制系统中的每个节点服务器建立数据对象标识表,其中记录了内存复制系统中所有数据对象在各个节点服务器的标识信息,各个节点服务器通过现有技术中的同步机制进行更新,从而保持数据一致性,标识信息可以是数据对象在主节点服务器和备份节点服务器的地址信息,也可以是数据对象在内存复制系统中的全局唯一标识,在全局唯一标识的情况下,还需要在各个节点服务器上建立一个内存地址映射表,其中记录了全局唯一标识与对应的数据对象的内存地址之间的映射关系。根据本发明的一个实施例,可以由进行垃圾回收的节点服务器在数据对象标识表中查找可被垃圾回收的数据对象在其它节点服务器的标识信息。根据本发明的另一实施例,可以选取其中一个节点服务器作为主管节点服务器来维护数据对象标识表,其它节点服务器上的数据对象的标识信息发生变化会及时通知该主管节点服务器,由该主管节点服务器对数据对象标识表进行相应的更新,进行垃圾回收的节点服务器将可被垃圾回收的数据对象的标识信息发送给主管节点服务器,由主管节点服务器在数据对象标识表中查找可被垃圾回收的数据对象在其它节点服务器的标识信息。在步骤S307,将所述可被垃圾回收的数据对象的标识信息发送至包含有所述可被垃圾回收的数据对象的其它节点服务器,即,其它节点服务器包含有与所述可被垃圾回收的数据对象有复制关系的数据对象;前进到步骤S308,流程结束。如果判断结果为是,则在步骤S303,利用从其它节点服务器接收的可被垃圾回收的数据对象的标识信息对与所述可被垃圾回收的数据对象有复制关系的数据对象进行垃圾回收;前进到步骤S304,将从其它节点服务器接收的可被垃圾回收的数据对象的标识信息删除,流程结束。如果空间释放之后,空闲的内存空间仍然过少或者连续空闲内存空间仍然不够用,则垃圾回收还会继续被触发,又回到流程的起始步骤,在判断不存在从其它节点服务器接收的可被垃圾回收的数据对象的标识信息的情况,流程前进到判断结果为否的分支,开始步骤S305-S309。根据本发明的一个实施例,描述利用标记清除方法(Mark-Swe印)对节点服务器的数据对象进行垃圾回收的过程,标记清除方法在运行的过程中分为三个阶段标记阶段、 清除阶段和压缩阶段。响应于垃圾回收被触发,根据本发明实施例的方法可以节省标记阶段的操作,而直接利用从其它节点服务器接收的可被垃圾回收的数据对象的标识信息进行清除操作,根据本发明的一个实施例,可被垃圾回收的数据对象的标识信息可以是可回收数据对象的内存地址信息,垃圾回收器直接将可回收数据对象的内存地址的内存空间释放掉。根据本发明的另一个实施例,可被垃圾回收的数据对象的标识信息可以是可回收数据对象在主节点服务器和备份节点服务器的全局唯一标识,则在其它节点服务器上建立内存地址映射表,其中记录了所述节点服务器包含的数据对象的全局唯一标识与所述数据对象的内存地址之间的映射关系,在内存地址映射表查找到该全局唯一标识所对应的数据对象的内存地址,进一步,垃圾回收器将所有可回收数据对象的内存地址的内存空间释放掉,最后在压缩阶段将离散凌乱分布的对象放到内存中的连续地址。根据本发明的另一个实施例,描述利用标记拷贝方法(Mark-Copy)对节点服务器的数据对象进行垃圾回收的过程,JVM将所管理的内存空间一分为二,当内存空间使用到一半时,垃圾回收器被激活进行垃圾回收,根据本发明实施例的方法,不必对数据对象进行标记操作,而是直接利用从其它节点服务器接收的可被垃圾回收的数据对象的标识信息进行拷贝操作,根据本发明的一个实施例,可被垃圾回收的数据对象的标识信息可以是可回收数据对象的内存地址信息,垃圾回收器将可回收数据对象的内存地址以外的内存地址上的所有存活的对象拷贝至另一半未使用的内存空间,并在另一半空间上继续分配内存,而前一半空间转为空闲空间作为下一次垃圾回收的目标空间。根据本发明的另一个实施例,可被垃圾回收的数据对象的标识信息可以是可回收数据对象在主节点服务器和备份节点服务器的全局唯一标识,则在其它节点服务器上维护的内存地址映射表查找到该全局唯一标识所对应的数据对象的内存地址,垃圾回收器将可回收数据对象的内存地址以外的内存地址上的所有存活的对象拷贝至另一半未使用的内存空间。图4示出根据本发明的实施例内存复制系统进行垃圾回收的实例,其中内存复制系统包括四个节点服务器,节点服务器1上有四个数据对象a、b、c和d,在节点服务器2上备份有数据对象a和c,在节点服务器3上备份有数据对象a、b和c,备份节点服务器4上备份有数据对象b、c和d,内存复制系统在各个节点服务器上创建有数据对象标识表,如表 1所示,数据对象标识表记录了内存复制系统中所有数据对象在各个节点服务器的地址。响应于节点服务器1的垃圾回收被触发,判断其上是否存在从其它节点服务器接收的可被垃圾回收的数据对象的标识信息,响应于判断结果为否,利用现有的垃圾回收机制将数据对象b和c回收掉,接着从数据对象标识表中查找到数据对象b和c在各个节点服务器的地址信息,如表2所示,根据表2节点服务器1分别将数据对象c的地址发送给节点服务器2, 将数据对象b的地址发送给节点服务器3,将数据对象b和c的地址发送给节点服务器4, 节点服务器2、3和4将节点服务器1接收的可回收数据对象的标识信息保存起来,在节点服务器2、3和4的垃圾回收被触发时,判断其上是否存在从其它节点服务器接收的可被垃圾回收的数据对象的标识信息,响应于判断结果为是,不必进行垃圾回收的标记操作,可以直接将可回收数据对象的内存地址的内存空间释放掉,完成垃圾回收,从而节省了进行标记操作的计算资源和时间开销,提高了内存复制系统进行垃圾回收的效率。
对象节点服务器1节点服务器2节点服务器3节点服务器4a<l,x00al45c3><2,0x0f890123><3,0x04381029)b<l,x052el59f><3,0x0a4bf916><4,0x0428c4d2>C<l,x05122b38><2,0x016b0c93><4,0x0284f231>d<l,x093257fe><3,0x0395da89><4,0x09846d32>
权利要求
1.一种用于内存复制系统的节点服务器进行垃圾回收的方法,该方法包括响应于垃圾回收被触发,判断是否存在从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息;响应于判断结果为是,利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收。
2.根据权利要求1所述的方法,进一步包括在将所述可被垃圾回收的数据对象进行垃圾回收之后将从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息删除。
3.根据权利要求1或2所述的方法,进一步包括响应于判断结果为否,对所述内存复制系统的节点服务器的数据对象进行垃圾回收;获取垃圾回收过程中可被垃圾回收的数据对象的标识信息;以及将所述可被垃圾回收的数据对象的标识信息发送至包含有所述可被垃圾回收的数据对象的内存复制系统的其它节点服务器。
4.根据权利要求3所述的方法,其中获取垃圾回收过程中可被垃圾回收的数据对象的标识信息进一步包括建立包含有内存复制系统中的数据对象在内存复制系统的各个节点服务器的标识信息的数据对象标识表;以及在所述数据对象标识表中查找所述可被垃圾回收的数据对象在内存复制系统的其它节点服务器的标识信息。
5.根据权利要求1所述的方法,其中所述可被垃圾回收的数据对象的标识信息包括所述可被垃圾回收的数据对象在所述内存复制系统的节点服务器的内存地址。
6.根据权利要求5所述的方法,其中利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收进一步包括释放所述可被垃圾回收的数据对象在所述内存复制系统的节点服务器的内存地址对应的内存空间。
7.根据权利要求1所述的方法,其中所述可被垃圾回收的数据对象的标识信息包括可被垃圾回收的数据对象的全局唯一标识。
8.根据权利要求7所述的方法,其中利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收进一步包括建立内存地址映射表,其中记录有所述内存复制系统的节点服务器包含的数据对象的全局唯一标识与所述数据对象的内存地址之间的映射关系;在内存地址映射表中查找所述全局唯一标识所对应的可被垃圾回收的数据对象的内存地址;以及释放所述可被垃圾回收的数据对象在所述内存复制系统的节点服务器的内存地址对应的内存空间。
9.一种用于内存复制系统的节点服务器进行垃圾回收的系统,该系统包括判断装置,被配置为响应于垃圾回收被触发,判断是否存在从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息;以及垃圾回收辅助装置,被配置为响应于判断结果为是利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收。
10.根据权利要求9所述的系统,进一步包括删除装置,被配置为在将所述可被垃圾回收的数据对象进行垃圾回收后将从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息删除。
11.根据权利要求9或10所述的系统,其中响应于所述判断装置的判断结果为否,所述系统进一步包括垃圾回收装置,被配置为对所述内存复制系统的节点服务器的数据对象进行垃圾回收;获取装置,被配置为获取垃圾回收过程中可被垃圾回收的数据对象的标识信息;以及发送装置,被配置为将所述可被垃圾回收的数据对象的标识信息发送至包含有所述可被垃圾回收的数据对象的内存复制系统的其它节点服务器。
12.根据权利要求11所述的系统,其中获取装置进一步被配置为建立包含有内存复制系统中的数据对象在内存复制系统的各个节点服务器的标识信息的数据对象标识表;以及在所述数据对象标识表中查找所述可被垃圾回收的数据对象在内存复制系统的其它节点服务器的标识信息。
13.根据权利要求9所述的系统,其中所述可被垃圾回收的数据对象的标识信息包括所述可被垃圾回收的数据对象在所述内存复制系统的节点服务器的内存地址。
14.根据权利要求13所述的系统,其中垃圾回收辅助装置进一步被配置为释放所述可被垃圾回收的数据对象在所述内存复制系统的节点服务器的内存地址对应的内存空间。
15.根据权利要求9所述的系统,其中所述可被垃圾回收的数据对象的标识信息包括可被垃圾回收的数据对象的全局唯一标识。
16.根据权利要求15所述的系统,其中垃圾回收辅助装置进一步被配置为建立内存地址映射表,其中记录有所述内存复制系统的节点服务器包含的数据对象的全局唯一标识与所述数据对象的内存地址之间的映射关系;在所述内存地址映射表中查找所述全局唯一标识所对应的可被垃圾回收的数据对象的内存地址;以及释放所述可被垃圾回收的数据对象在所述内存复制系统的节点服务器的内存地址对应的内存空间。
全文摘要
本发明提供一种用于内存复制系统进行垃圾回收的方法和系统,其中所述内存复制系统包括多个节点服务器,并且将一个节点服务器中的数据对象复制并分发到一个或多个其它节点服务器,该方法包括响应于垃圾回收被触发,判断是否存在从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息;响应于判断结果为是,利用从内存复制系统的其它节点服务器接收的可被垃圾回收的数据对象的标识信息对所述可被垃圾回收的数据对象进行垃圾回收。
文档编号G06F12/02GK102262591SQ201010192518
公开日2011年11月30日 申请日期2010年5月31日 优先权日2010年5月31日
发明者史巨伟, 李立, 田瑞雄, 赵邑新 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1