基于Java虚拟机的并发垃圾收集器框架的制作方法

文档序号:6339156阅读:255来源:国知局
专利名称:基于Java虚拟机的并发垃圾收集器框架的制作方法
技术领域
本发明属于Java虚拟机垃圾回收器技术领域,具体涉及一种基于Java虚拟机的 并发垃圾回收器框架。
背景技术
伴随着高级编程语言的兴起,垃圾收集(Garbage Collection, GC)技术在系统安
全和资源管理方面扮演着越来越重要的角色。在很多编程系统中,程序编写者需要在程序编写过程中显示的释放不使用的内 存空间。在这种设计中,程序编写者的失误很容易造成程序的内存泄露或者异常终止, 这在很大程度上影响了系统的稳定性和可靠性。而垃圾回收技术要求虚拟机执行判断和 清理程序不再使用的内存空间。所以垃圾收集技术能有效地避免这些情况的发生,它使 内存的管理自动化,程序编写者不再需要对不使用的内存进行释放,垃圾收集器会在一 个合适的时间对这个堆进行处理,把已经不再使用的空间释放掉。这样的设计使内存的 管理更加模块化,并具有更高的可靠性。常见的垃圾收集算法在系统堆内存耗尽时,虚拟机会“暂停”所有应用程序线 程进行垃圾收集。等垃圾收集工作结束,应用程序线程会被重新启动继续其执行。这种 技术被称为“停止世界(stop-the-worid)”的垃圾收集。随着现代应用程序使用内存量 增大、对象数量增多,“停止世界”垃圾收集所造成的停顿严重影响了应用程序的响应 时间。于是为了消除“停止世界”垃圾收集造成性能影响的问题,很多研究机构和 个人都在致力于实现可以使垃圾收集器在应用程序线程执行的情况下进行垃圾收集的技 术,以此来提高应用程序的效率,这样的技术被称为并发垃圾收集技术。但是目前已有 的并发垃圾收集技术实现都比较分散,并且实现比较繁琐,对于不同的系统的可移植性 较差也是一个比较大的问题。

发明内容
本发明的目的在于针对现有并发垃圾收集技术实现比较分散的问题,提出一个 并发垃圾收集器的统一框架。本发明调研了不同的并发垃圾收集算法的差异,发现不同的并发垃圾收集算法 之间还是有很大程度的相似度,只有在具体的算法实现时有较大的差异,这样的调研结 果说明了建立统一框架的可能性和优越性。本发明采用的技术方案为为并发垃圾收集器设计一个统一框架,可以在其中 方便地实现和改进各种不同的并发垃圾收集算法。并且将垃圾收集器本身设计成多线程 (GC线程),以此来提高垃圾收集的效率。并发垃圾收集器的统一框架是专门为并发垃圾收集器所设计的一个统一框架。 通过研究不同的并发垃圾收集算法的异同点,该框架提供了通用的垃圾收集数据处理和合并、垃圾收集等功能。通过该框架,并发垃圾收集器的开发者只需要实现其核心算法 就可以实现一个工作良好的并发垃圾收集器,极大的方便了各种不同的并发垃圾收集算 法实现和改进。并发垃圾收集器的统一框架主要分为并发算法框架和调度器两个模块。本发明提出的基于Java虚拟机的并发垃圾收集器框架,分为并发算法框架和调 度器两个模块两个部分,其中,所述并发算法框架,在设计上主要通过对当前存在的并 发垃圾收集算法来进行差异分析,最终划分算法中便于重用和不能重用的模块,并且针 对不同的特性分别进行实现;现有的框架中又把整个并发算法框架分成核心算法实现、 数据并行处理和合并、并发收集这三个模块;所述调度器主要由调度触发器、调度算 法、耗尽处理三个模块组成;该调度器而言,主要有两个方面的作用
第一,决定何时触发GC;
第二,处理系统资源耗尽的情况;按照系统资源耗尽发生的时刻段,把耗尽情况分 成三种一体发生在应用程序运行中,垃圾收集线程没有启动;发生在垃圾收集线程启 动后的跟踪阶段;以及发生在垃圾收集线程启动后的收集清理阶段;调度器对这三种情 况分别进行处理
(1)对于第一种情况,只把所有的线程都停下来,做一次“停止世界”的垃圾收集 过程,之后再让程序继续运行;
(2)当系统资源耗尽出现在垃圾收集线程启动后的跟踪阶段,调度器停掉其他应用 程序的线程,让垃圾收集线程把跟踪阶段完成,先得到对象跟踪信息;之后用这个对象 跟踪信息做一次“停止世界”的垃圾收集过程来释放内存;
(3)对于系统资源耗尽出现在垃圾收集线程启动后的收集清理阶段,调度器只停掉 其他应用程序的线程,让垃圾收集线程把收集清理阶段完成。并发垃圾收集器的最大特点就是GC线程和应用程序线程同时运行,而且无论应 用程序还是垃圾收集器都可能是多线程。我们设计了一个GC线程组和应用程序线程组 共享的状态变量来保证线程之间的同步。图1描述了并发垃圾收集器运行过程中线程对 该状态变量进行的改变。如果考虑系统堆内存提前耗尽的情况,就可以把垃圾收集过程表示为6个状态 之间的转换,它们之间的转换关系如图2所示,分别表示的作用为
1、状态①应用程序正常运行,每次申请内存空间的操作都会调用GC调度器来检 测是否需要触发并发垃圾收集过程,需要的话转到状态②;
2、状态②应用程序线程分别停顿,收集其执行栈上的根节点,放入根节点集合, 并打开当前线程的写拦截器。当最后一个线程的根节点集合收集完成后,启动GC线程 开始执行追踪过程,转到状态③;
3、状态③追踪过程与应用程序并发的运行,当最后一个GC线程完成追踪过程 后,转到状态④;
4、状态④追踪过程完成,当应用程序有新的申请内存操作时会触发并发的收集过 程,转到状态⑤;
5、状态⑤收集过程与应用程序并发运行,当最后一个GC线程完成收集过程后转 到状态①;
6、状态⑥垃圾收集过程处于状态①、③、⑤时,如果系统堆内存被应用程序耗尽,将进入状态⑥进行处理(系统堆内存耗尽处理),随后转到状态①。
在实现过程中,应该考虑到多个应用程序线程之间的协同问题以及多个GC线程之间 的协同问题。所以我们加入一些多个应用程序线程共享的同步变量和多个GC线程共享 的同步变量来处理这些问题,与之相对应的状态转换过程如图3。上述这种状态转换是我们设计的统一框架提供的专门为并发垃圾收集器设计 的,只要利用上述的状态变换,程序员能实现绝大多数的并发垃圾收集算法。基于这 个统一框架,已经实现了等三种并发垃圾收集算法,它们是Mostly-Concurrent算法和 Snapshot-at-the-Beginning算法两种不同实现,这也说明了统一框架可以方便地实现不同 并行垃圾收集技术。这里也对这三种并行垃圾收集技术进行简单的介绍
Mostly-Concurrent算法的基本思想是先用并发的GC线程去做尽量多的“标 记”工作,然后用一次“停止世界”追踪过程来完成剩下的“标记”工作;而 Snapshot-at-the-Begiraiing算法的主要思想是分别对当前运行的每个应用程序线程的运行 栈做一次“快照”(snapshot),得到一个完整的根节点集合,然后GC线程从这个根节点 集合开始执行并发的追踪过程。在具体实施方式
一节中将对这三种算法和数据结构进行 详细描述。本发明的有益效果是1)提供了一个实现并发垃圾收集器的统一框架,让各种 不同的算法能在一个框架下方便的被实现。2)框架的实现不针对具体的某一平台,这样 的设计增加了并行垃圾收集技术的平台可移植性。3)解决了在同一平台下实验不同并行 垃圾收集技术的问题,这样就可以在一个特定的平台下研究不同并行垃圾收集技术的优 劣性。4)在目前构建的框架下设计并实现了三种并发垃圾收集算法,有效的利用系统资 源,证明了该框架的实用性。5)通过测试表明,并发垃圾收集器能有效的消除服务端应 用程序因垃圾收集所导致的停顿;对于客户端应用程序,也能在降低停顿时间的同时, 有效的缩短应用程序的执行的时间。


图1所示为并发垃圾收集器中应用程序线程和GC线程的同步关系。图2所示为并发垃圾收集的状态转换。图3所示为并发垃圾收集的运行过程中的状态转换过程。图4所示为并发垃圾收集器的堆空间耗尽处理。
具体实施例方式本发明按照上述并发垃圾收集框架主要分为并发算法框架和调度器两个模块。 下面就对本框架中这两个模块的具体实施作一个详细的介绍。在介绍并发算法框架的同 时,还会对基于本框架实现的三种并发垃圾收集算法进行介绍。图2为并发垃圾收集的状态转换图,并发垃圾收集框架的运行就是这6个状态的 转换。前5个状态属于并发算法框架的范畴,最后第6个状态是调度器中实现的内存资 源耗尽处理。1)并发算法框架。并发算法框架是这整个统一框架的核心部分,在设计上主要 通过对当前存在的并发垃圾收集算法来进行差异分析,最终划分算法中便于重用和不能重用的模块,并且针对不同的特性分别进行实现。现有的框架中又把整个并发算法框架 分成了核心算法实现、数据并行处理和合并、并发收集这三个模块。经过调研发现,在并发垃圾收集技术中很大一部分的处理是可以统一实现的。 例如并发垃圾收集技术中有大量对系统的数据进行并发处理和合并的操作,而这一类的 操作是不同的并发垃圾收集技术都需要的,所以统一框架通过抽象和提取出一个适用于 所有并发垃圾收集技术的数据并行处理和合并的模块,很大程度上减少了实现并发垃圾 收集算法的工作量难度。不同的并发垃圾收集技术之间的差异最大的只体现在具体算法 的核心思想和实现步骤上。简单的说,并发算法框架中的数据并行处理和合并模块以及 并发收集模块适用于所有的并发垃圾收集技术,在本框架下实现不同的并发收集方法只 要实现其核心算法部分就可以了。a)核心算法实现
b)数据并行处理
c)并发收集方法
2)调度器。调度器主要由调度触发器、调度算法、耗尽处理三个模块组成。对调 度器而言,主要有两个方面的作用
第一,调度器需要决定何时触发GC。因为如果垃圾收集发生过早,就没有充分利 用系统内存资源并且造成垃圾收集的频率过快,这样会影响应用程序性能;如果发生过 晚,系统堆内存可能在并发垃圾收集完成前被耗尽,进入状态⑥进行“耗尽处理”,这 样又增加了应用程序的停顿时间。对如何找到这样的GC触发点,其实同样有很多不同的实现方式,框架中给出了 一个GC_SChedUle接口,在整个并发垃圾收集器框架中都统一使用这个接口进行垃圾收集 线程的管理。这样方便程序员通过这个接口来实现不同的垃圾收集的调度算法。第二,调度器需要处理系统资源耗尽的情况。目前实现的统一框架按照系统资 源耗尽发生的时刻段,可以把耗尽情况分成三种一体发生在应用程序运行中,垃圾收 集线程没有启动;发生在垃圾收集线程启动后的跟踪阶段;以及发生在垃圾收集线程启 动后的收集清理阶段。调度器从应用程序的运行效率最大化的角度考虑,并利用并发垃 圾收集的特点,对这三种情况分别进行了处理。(4)对于第一种情况,因为垃圾收集线程还没有启动,没有可以利用的信息, 所以只能把所有的线程都停下来,做一次“停止世界”的垃圾收集过程。之后再让程序 继续运行。(5)当系统资源耗尽出现在垃圾收集线程启动后的跟踪阶段,那么并发垃圾收 集阶段的跟踪信息时可以复用的。调度器的做法是停掉其他应用程序的线程,让垃圾收 集线程把跟踪阶段完成,先得到对象跟踪信息。之后用这个对象跟踪信息做一次“停止 世界”的垃圾收集过程来释放内存。这样就省去了一次跟踪处理。对于系统资源耗尽出现在垃圾收集线程启动后的收集清理阶段,处理就更为简 单了。因为之前的跟踪和清理过程都还是适用的,调度只要停掉其他应用程序的线程, 让垃圾收集线程把收集清理阶段完成就可以了。
权利要求
1.一种基于Java虚拟机的并发垃圾收集器框架,其特征在于该框架分为并发算法框 架和调度器两个模块两个部分,其中,所述并发算法框架,在设计上主要通过对当前存 在的并发垃圾收集算法来进行差异分析,最终划分算法中便于重用和不能重用的模块, 并且针对不同的特性分别进行实现;现有的框架中又把整个并发算法框架分成核心算法 实现、数据并行处理和合并、并发收集这三个模块;所述调度器主要由调度触发器、调 度算法、耗尽处理三个模块组成;该调度器而言,主要有两个方面的作用第一,决定何时触发GC;第二,处理系统资源耗尽的情况;按照系统资源耗尽发生的时刻段,把耗尽情况分 成三种一体发生在应用程序运行中,垃圾收集线程没有启动;发生在垃圾收集线程启 动后的跟踪阶段;以及发生在垃圾收集线程启动后的收集清理阶段;调度器对这三种情 况分别进行处理对于第一种情况,只把所有的线程都停下来,做一次“停止世界”的垃圾收集过 程,之后再让程序继续运行;当系统资源耗尽出现在垃圾收集线程启动后的跟踪阶段,调度器停掉其他应用程序 的线程,让垃圾收集线程把跟踪阶段完成,先得到对象跟踪信息;之后用这个对象跟踪 信息做一次“停止世界”的垃圾收集过程来释放内存;对于系统资源耗尽出现在垃圾收集线程启动后的收集清理阶段,调度器只停掉其他 应用程序的线程,让垃圾收集线程把收集清理阶段完成。
2.—种如权利要求1所述基于Java虚拟机的并发垃圾收集器框架,其特征在于,框架 的各个状态之间的转换关系为状态①应用程序正常运行,每次申请内存空间的操作都会调用GC调度器来检测是 否需要触发并发垃圾收集过程,需要的话转到状态②;状态②应用程序线程分别停顿,收集其执行栈上的根节点,放入根节点集合,并打 开当前线程的写拦截器;当最后一个线程的根节点集合收集完成后,启动GC线程开始 执行追踪过程,转到状态③;状态③追踪过程与应用程序并发的运行,当最后一个GC线程完成追踪过程后,转 到状态④;状态④追踪过程完成,当应用程序有新的申请内存操作时会触发并发的收集过程, 转到状态⑤;状态⑤收集过程与应用程序并发运行,当最后一个GC线程完成收集过程后转到状 态①;状态⑥垃圾收集过程处于状态①、③、⑤时,如果系统堆内存被应用程序耗尽, 将进入状态⑥进行系统堆内存耗尽处理,随后转到状态①。
全文摘要
本发明属于Java虚拟机垃圾回收器技术领域,具体涉及一种基于Java虚拟机的并发垃圾回收器框架。该框架分为并发算法框架和调度器两个模块两个部分,其中,所述并发算法框架,在设计上主要通过对当前存在的并发垃圾收集算法来进行差异分析,最终划分算法中便于重用和不能重用的模块,并且针对不同的特性分别进行实现;所述调度器主要由调度触发器、调度算法、耗尽处理三个模块组成;该调度器主要有两个方面的作用决定何时触发GC,处理系统资源耗尽的情况。本发明增加了并行垃圾收集技术的平台可移植性,解决了在同一平台下实验不同并行垃圾收集技术的问题,可以在一个特定的平台下研究不同并行垃圾收集技术的优劣性。
文档编号G06F9/46GK102023891SQ201010595749
公开日2011年4月20日 申请日期2010年12月20日 优先权日2010年12月20日
发明者周寻, 张源, 杨珉, 王迪, 臧斌宇 申请人:复旦大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1