[发明专利]一种工作于混合模式执行引擎中的垃圾收集方法有效
申请号: | 201110227839.5 | 申请日: | 2011-08-10 |
公开(公告)号: | CN102411513A | 公开(公告)日: | 2012-04-11 |
发明(设计)人: | 杨珉;张源;彭智俊 | 申请(专利权)人: | 复旦大学 |
主分类号: | G06F9/48 | 分类号: | G06F9/48 |
代理公司: | 上海正旦专利代理有限公司 31200 | 代理人: | 陆飞;盛志范 |
地址: | 200433 *** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 工作 混合 模式 执行 引擎 中的 垃圾 收集 方法 | ||
技术领域
本发明属于Java运行环境设计技术领域,具体涉及Java不同的执行引擎混合工作时的垃圾收集方法。
背景技术
自动化内存管理,又称垃圾收集器是现代编程语言中普遍采用的一种提高程序构建复杂度、降低依赖性以及增强可靠性的内存管理机制。垃圾收集器可以解决手动管理内存语言中经常出现的“内存多次释放”、“悬挂指针”,“内存溢出”等问题。作为目前应用最广泛的面向对象编程语言,Java也将垃圾收集机制视为内存管理的一个重要方面。
于此同时,随着网络技术的不断发展,尤其是云计算的出现,加之嵌入式系统的高速发展,越来越多的嵌入式手持设备已经融入了现代的人的生活当中。而Java语言因其独特的语言特性及可移植性,被越来越多地采用作为嵌入式系统的开发语言。其中以Google公司开发的Android手机操作系统为典型代表,而Android的核心便是名为Dalvik的Java虚拟机。而又受限于嵌入式设备的资源紧缺性(嵌入式设备的内存容量较之平常PC机要小得多),故而如何正确且高效的采用垃圾收集机制来进行内存管理就显得尤为重要。
而现如今,在某些虚拟机中存在着多种执行引擎,如解释器,即时编译器等。即时编译其因其良好的性能被广泛应用于桌面及服务器环境中,然后在嵌入式环境中即时编译其却存在着加重程序运行负担的缺点。在资源受限的环境中解释器和即时编译其共存的执行模式将是最好的选择。在单一执行引擎模式下,垃圾收集只需要同一种执行引擎交互即可,设计往往都比较简单。针对更加适合嵌入式环境的解释器和即时编译其共存的执行模式,本发明设计了一种垃圾收集器,能够很好的同时与解释器和即时编译其协作,简单高效的完成对Java虚拟机中的死对象的收集。并且存在着两者混合执行的工作模式,故而如何正确地设计并实现在混合执行模式下的Java垃圾收集器便成为亟待解决的问题。
发明内容
本发明的目的在于提供一种工作于混合模式执行引擎中的,能够同时与解释器和即时编译器协作,高效完成对Java虚拟机中死对象收集的垃圾收集方法。
垃圾收集器在垃圾收集过程中需要和执行引擎配合,主要体现在下面几个方面:
1、每个Java的线程需要间断的去检查是否有其他线程需要将自身挂起;
2、为了支持垃圾收集器进行根集合的扫描操作,每个线程在进行有可能会导致垃圾收集器将自身挂起的操作之前应当保存必要的信息(如寄存器的信息),这样在垃圾收集器对每个线程进行根集合扫描的时候才能采集到完整的根集合信息。随后利用采集到的根集合信息在选择相应的垃圾收集策略,诸如标记-清扫等算法,进行垃圾回收。
本发明中的垃圾收集方法采用经典的标记--清扫(Mark and Sweep)垃圾回收算法。整个垃圾回收过程分为如下三个阶段:
1、线程挂起
如前所述,在垃圾收集器开始工作时,要求其他的线程都应处于挂起状态,随后垃圾收集器开始垃圾回收操作,待完成之后通知被挂起的线程结束挂起操作,恢复运行。
当垃圾收集器将需要将线程挂起时,将待挂起线程中的挂起请求数的值加1,而当每个线程在解释模式运行时,在挂起点时进行检查,去检查当前线程是否需要被挂起。挂起点主要出现在发生如下几处逻辑之时:
1)异常处理;
2)向后跳转;
3)函数调用及返回。
此时若发现自身的挂起请求数不为零,则将自身挂起,直到挂起请求数变为零后才会恢复运行。
而垃圾收集器在“通知”每个线程应当挂起后,逐一去检查这些线程,看其是否已处于挂起状态;若不然则一直等待,直至对方挂起。若在等待并尝试若干次后,发现该线程仍处于运行状态,则尝试提高此线程的优先级,使其能尽早碰触到检查点。若尝试次数超过某一固定阈值,则垃圾收集器的挂起等待就算失败,整个Java虚拟机也将中止退出。
2、扫描栈帧,建立根集合
在混合执行引擎模式下,由于会有好几种代码交互运行,在运行时状态,如果要完成垃圾收集,在扫描遍历建立根集合时,除了要扫描考虑Java函数栈帧之外,还必须扫描动态编译生成的代码运行时的本地函数栈帧,同时由于动态编译生成函数会将部分参数放在物理寄存器内,故而根集合的建立还需要扫描物理寄存器。附图1所示为单一线程在混合模式执行下触发垃圾收集时的根集合示意图。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于复旦大学,未经复旦大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110227839.5/2.html,转载请声明来源钻瓜专利网。