当前位置: 首页 > 专利查询>复旦大学专利>正文

基于Java虚拟机的并发垃圾收集器的调度器制造技术

技术编号:5443619 阅读:301 留言:0更新日期:2012-04-11 18:40
发明专利技术属于Java虚拟机垃圾回收技术领域,具体为一种基于Java虚拟机的并发垃圾回集器的调度器。本发明专利技术调度器主要通过动态地对当前应用程序的运行情况进行分析,让垃圾收集过程能在合适的时间点触发。调度器在应用程序每次申请内存时都使用一个简单的时间推算方法来判断是否需要触发垃圾收集。调度器同时也处理系统内存资源耗尽的情况。本发明专利技术作为并发垃圾收集统一框架的一部分,提供了一种低开销高性能的垃圾收集调度器,优化了垃圾收集的触发点,既提高了垃圾收集器的运行效率,也大大降低了系统资源耗尽发生的可能性。

【技术实现步骤摘要】

本专利技术属于Java虚拟机垃圾回收
,具体涉及一种基于Java虚拟机的并 发垃圾回集器的调度器。
技术介绍
随着Java等高级编程语言的兴起,如何合理的利用内存成为了为各高级语言提供环 境支持时最关键的考虑因素之一。作为内存利用的主要手段,垃圾收集技术在系统安全 和资源管理方面扮演着越来越重要的角色。随着现代应用程序使用内存量增大、对象数量增多,以及消减“停止世界”垃 圾收集所造成的停顿严重影响了应用程序的响应时间,并发的垃圾收集(Concurrent GC) 出现了。该技术使垃圾收集器可以在应用程序线程执行的情况下进行垃圾收集,即垃圾 收集器和应用程序线程是并行执行的。通过测试,并发垃圾收集技术较之“停止世界” 垃圾收集有明显的运行效率提升,所以这个概念开始为越来越多的人所接受。然而对于并发垃圾收集器何时被触发就成了一个问题因为如果垃圾收集发生 在系统内存还很空余的时候,就没有充分利用系统内存资源并且造成垃圾收集的频率过 高,反而会影响应用程序性能;如果发生在系统内存已经比较紧张的时候,那系统堆内 存就很可能在并发垃圾收集完成前被耗尽,这样就迫使垃圾收集器进行“耗尽处理”, 需要被迫把应用程序停下来,这样无疑就增加了应用程序的停顿时间。尤其对于内存需 求量大的程序,并发垃圾收集的调度方式对其运行的稳定性和效率都会有显著的影响。 所以如何恰如其分的找出这个GC触发的时间点变得十分关键。当然,对于常规的垃圾 收集技术(如“停止世界”垃圾收集),好的调度方式也能明显改善垃圾回收器的运行效 率。
技术实现思路
本专利技术的目的在于设计一种能使并发垃圾收集器在合适的时间点被触发,以便 提升垃圾收集器乃至整个程序运行效率的,关于并发垃圾收集器的调度器,并使用调度 器对垃圾收集线程进行动态调度,从而更有效的利用系统资源。本专利技术主要通过动态地对当前应用程序的运行情况进行分析,让垃圾收集过程 能在合适的时间点触发。在垃圾收集器的实现中,我们把当前堆内存空间占用量,应用 程序分配内存速度等因素都记录下来,以计算的方式估计出垃圾收集器的合适触发点。首先定义理想的GC触发时间点,即在垃圾收集器的跟踪处理全部完成后,清理 处理尚未开始前系统的内存资源正好完全耗尽。但是显然的,由于并发垃圾收集器是和 应用程序同时执行的,程序运行的不确定性决定了并发垃圾收集器达到理想GC触发点是 不可能的,不过我们还是可以通过评估的方式使调度器选定的GC触发点尽量的接近这一iMuM ;^vs O在本专利技术中,调度器需要记录的系统的信息主要包括堆的总体大小Μ。当前堆 (Heap)内的内存消耗情况Mp当前应用程序的内存消耗的平均速率V1,以及当前垃圾收集器跟踪处理的平均速率v2。而最理想的情况是当垃圾收集的跟踪处理需要的时间、和 应用程序最后耗尽系统内存资源的时间t2相同。根据上述条件,我们可以得到以下三个 等式t! = t2 ; ① ti = M1ZV2 ;②I2=(M0-M1)ZV1;; ③根据以上三个等式,我们就可以计算出最佳的GC触发点,即每当系统的内存消耗到 M2时,[M2 = MJV2/(V1+V2)],就应该触发垃圾收集器进行工作,因为这样在垃圾收集 的跟踪处理结束时,系统的内存正好被耗尽,即得到完全的使用。也就是说,在理论上 讲这样能尽可能的逼近最优的GC触发点。然而在实际运行时,由于并发程序的不确定 性,这样的设置很可能会让系统内存资源在GC跟踪处理尚未结束时就耗尽。这时一旦 系统资源耗尽,垃圾收集器就要被迫停止应用程序来处理,这样反而会使应用程序的运 行效率减低。调度器用一个内存使用上线M'来代替堆的总大小Mtl来解决这个问题。经 过实际的测试,我们的调度器用堆总大小的90%来做内存使用上线, M* = 0.9 * M0④所以,调度器最终的最佳GC触发点是 M+=0.9*MQ*V2/ (V1 + V2)。⑤但是系统真的实时都检验上述数据会对性能造成显著的影响。所以本专利技术中的调度 器只在每次系统要求申请新的内存时才会进行上述检验,这样就能很好的减少了实时检 验带来的性能影响。当然,这样的处理同样可以满足垃圾收集器的正确性。因为只有当 应用程序申请系统内存时,系统的堆内存才会增大,其他事件不会造成系统堆内存变化。另一方面,为了在不丢失准确性的前提下尽量减小对应用程序运行的影响,调 度器在应用程序每次申请内存时都使用一个简单的时间推算方法来判断是否需要触发垃 圾收集。最后,虽然调度器可以大大降低系统资源耗尽的可能性,但是考虑到并发垃圾收集器的GC线程是和应用程序同时运行的,由并发垃圾收集的跟踪和标记等操作所需时 间的不确定性,系统资源还是有耗尽的可能。所以调度器同时也需要处理系统内存资源 耗尽的情况,调度器同样也给出了处理资源耗尽的处理方案。本专利技术的有益效果是本专利技术作为并发垃圾收集统一框架的一部分(状态 ⑥),提供了一种低开销高性能的垃圾收集调度器,优化了垃圾收集的触发点,既提高 了垃圾收集器的运行效率,也大大降低了系统资源耗尽发生的可能性。同时,该调度器 也处理了并发垃圾收集时系统资源耗尽的情况。附图说明图1所示为并发垃圾收集的状态转换。图2所示为二分逼近法的实现过程。具体实施例方式本专利技术的基本思想是通过动态收集系统实时信息,并通过进行计算出综合评估值的方式来评估出更为准确GC触发点。这里将对调度器需要收集的信息和如何综合评 估计算进行详细的讨论。1)首先定义理想的GC触发点,即在垃圾收集器的跟踪处理全部完成后,清理 处理尚未开始前系统的内存资源正好完全耗尽。但是显然的,由于并发垃圾收集器是和 应用程序同时执行的,程序运行的不确定性决定了并发垃圾收集器达到理想GC触发点是 不可能的,不过我们还是可以通过评估的方式使调度器选定的GC触发点尽量的接近这一iMuM ;^vs O在本专利技术中,调度器需要记录的系统的信息主要包括堆的总体大小Μ。当前堆 (Heap)内的内存消耗情况Mp当前应用程序的内存消耗的平均速率V1,以及当前垃圾收 集器跟踪处理的平均速率V2。而最理想的情况是当垃圾收集的跟踪处理需要的时间、和 应用程序最后耗尽系统内存资源的时间t2相同。根据上述条件,我们可以得到以下三个 等式t! = t2 ; ① ti = M1ZV2 ;②t2 = (M0 - M1)/V1 ;③根据以上三个等式,我们就可以计算出最佳的GC触发点,即每当系统的内存消耗到 M2时,[M2 = MJV2/(V1+V2)],就应该触发垃圾收集器进行工作,因为这样在垃圾收集 的跟踪处理结束时,系统的内存正好被耗尽,即得到完全的使用。也就是说,在理论上 讲这样能尽可能的逼近最优的GC触发点。然而在实际运行时,由于并发程序的不确定 性,这样的设置很可能会让系统内存资源在GC跟踪处理尚未结束时就耗尽。这时一旦 系统资源耗尽,垃圾收集器就要被迫停止应用程序来处理,这样反而会使应用程序的运 行效率减低。调度器用一个内存使用上线M'来代替堆的总大小Mtl来解决这个问题。经 过实际的测试,我们的调度器用堆总大小的90%来做内存使用上线, M* = 0.9 * M0④所以,调度器最终的最佳GC触发点是 M+=0.9*MQ*V2/ (V1 + V2)。⑤ 但是系统真的实时本文档来自技高网...

【技术保护点】
一种基于Java虚拟机的并发垃圾收集器的调度器,其特征在于调度器记录系统的信息包括堆的总体大小M↓[0]、当前堆内的内存消耗情况M↓[1]、当前应用程序的内存消耗的平均速率V↓[1],以及当前垃圾收集器跟踪处理的平均速率V↓[2];且垃圾收集的跟踪处理需要的时间t↓[1]和应用程序最后耗尽系统内存资源的时间t↓[2]相同,即得到以下三个等式:t↓[1]=t↓[2];t↓[1]=M↓[1]/V↓[2];t↓[2]=(M↓[0]-M↓[1])/V↓[1];于是,调度器最终的最佳GC触发时间点为:M↑[+]=0.9*M↓[0]*V↓[2]/(V↓[1]+V↓[2])。

【技术特征摘要】
1.一种基于Java虚拟机的并发垃圾收集器的调度器,其特征在于调度器记录系统的 信息包括堆的总体大小Mp当前堆内的内存消耗情况Mp当前应用程序的内存消耗的平 均速率V1,以及当前垃圾收集器跟踪处理的平均速率V2;且垃圾收集的跟踪处理需要的 时间^和应用程序最后耗尽系统内存资源的时间t2相同,即得到以下三个等式tl — t2 ;ti = M1ZV2 ;t2 = (M0 - M1)/V1 ;于是,调度器最终的最佳GC触发时间点为 M+i.^Mon^/OA+V》。2.根据权利要求1所述的基于Java虚拟机的并发垃圾收集器的调度器,其特征在于所 述调度器采用二分逼近法逼近GC触发时间点,即第一次选取的时间t/为t/ = t0 + M0/2V0⑦而第二次选取的时间t2'为并按下式进行计算在以上各式中,Mtl表示、时刻堆的大小,Vtl表示、时刻内存消耗的平均速率,以此 类推,Mn表示、时刻堆的大小,Vn表示tn时刻内存消耗的平均速率;在某一次垃圾结束时刻^,调度器用式⑨计算出^时刻,之后忽略Ic^ljt1时间段中对 堆内存的申请的检验;当到达^时刻时,首先检验是否已经超...

【专利技术属性】
技术研发人员:杨珉张源周寻王迪臧斌宇
申请(专利权)人:复旦大学
类型:发明
国别省市:31[中国|上海]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1