基于堆栈体系结构Java SoC系统的垃圾收集方法技术方案

技术编号:7837721 阅读:264 留言:0更新日期:2012-10-12 02:31
本发明专利技术公开了一种多线程动态调度垃圾收集器进行垃圾回收的基于堆栈体系结构的Java?SoC系统的垃圾收集方法,它将Java?SoC系统的生命周期分为系统初始化阶段和实时任务阶段两个阶段,在Java?SoC系统初始化阶段,由Java虚拟机主动调用垃圾收集器进行单线程显式调用垃圾收集;在发生“内存不足”异常时,由Java?SoC系统触发调用垃圾收集器进行单线程显式调用垃圾收集;在多线程实时任务运行阶段,由一个并发的collector线程以周期TC调度垃圾收集器进行垃圾收集,垃圾收集器的垃圾收集的工作流程为:1)对Java?SoC系统中的根集对象进行扫描;2)标记;3)把非垃圾对象从子空间fromespace拷贝至子空间tospace中;4)清扫句柄;5)清空子空间fromspace;6)fromspace与tospace子空间翻转。

【技术实现步骤摘要】

本专利技术设计一种Java SoC垃圾收集方法,具体来说,设计一种多线程动态调度垃圾收集器进行垃圾回收的基于堆栈体系结构的Java SoC系统的垃圾收集方法。
技术介绍
近年来,Java技术凭借其独特的跨平台性,良好的封装及安全性等被广泛应用于嵌入式系统中。同时随着超高集成度芯片技术及工艺的快速发展,用硬件实现JVMCJava虚拟机)成为可能,Java处理器应运而生。Java SoC是将Java处理器核、系统总线及外设控、制器等模块整合到一块小型芯片上,不仅显著地提高了 Java程序的运行速度和处理能力,并且集成了丰富的外围接口,为嵌入式系统设计,特别是嵌入式Java计算及应用提供了一种很好的解决方案。Java技术建立在自动内存管理的基础上,应用开发人员可以从艰涩复杂的内存管理逻辑中解脱出来,专注于应用业务逻辑的设计,这一特点使得Java成为大型系统开发的“宠儿”。而所有的Java自动内存管理都是采用垃圾回收机制完成,承担这一功能的主体就是JVM重要的组成模块-垃圾收集器(Garbage Collector,以下简称GC)。主流PC平台的GC对系统资源要求比较高,其运行状态一般无法预测,不适合嵌入式与实时环境,反之此类系统一般也不具备垃圾回收功能。中国专利申请号200710026998. 2的专利申请“Java卡系统垃圾回收方法”中公开了一种Java卡垃圾回收方法,采用单线程显式调用垃圾收集,即停止所有(Stop-The-World,简称STW)的工作方式,在垃圾收集开始时停止执行其他的应用程序,这种方式可以实现垃圾回收,但针对嵌入式实时环境领域的应用,一方面无法预测垃圾收集所需要的时间,另一方面无法保证在应用程序执行时已经回收了足够可以利用的内存,所以无法满足嵌入式领域的高实时性要求。
技术实现思路
针对以上的不足,本专利技术提供了一种可以极大保证垃圾收集的实时性的多线程动态调度垃圾收集器进行垃圾回收的基于堆栈体系结构的Java SoC系统的垃圾收集方法,它将Java SoC系统的生命周期分为系统初始化阶段和实时任务阶段两个阶段,在Java SoC系统初始化阶段,由Java虚拟机主动调用垃圾收集器进行单线程显式调用垃圾收集;在发生“内存不足”异常时,由Java SoC系统触发调用垃圾收集器进行单线程显式调用垃圾收集;在多线程实时任务运行阶段,由一个并发的collector线程以周期T。调度垃圾收集器进行垃圾收集,其中,collector表示承担具体的垃圾收集器逻辑的线程,T。表示collector线程的周期。所述Java SoC系统的句柄池定义三个GC链表,freeList用于存储没有指向任何对象或者其指向的垃圾对象已经回收完毕的句柄;greyList用于存储所有已经被collector线程访问过,但其引用变量没有遍历的对象句柄;usedList用于存储正指向一个对象的句柄。所述垃圾收集器的垃圾收集的工作流程为步骤一、对象扫描对Java SoC系统中的根集对象进行扫描,扫描过程中,把静态域表中所有引用的对象或者mutator线程的堆栈数据压入greyList构成的标记栈,其中,mutator表示承担应用任务的用户线程;步骤二、标记从标记栈greyList中弹出一个对象引用,从其句柄中找到对象类型信息,获得该对象的实例数据类型的信息GC. info,按照在类中声明的先后顺序从低到高GC. info的每一位对应一个实例变量,如果某一实例变量为引用类型,则相应的位置1,垃圾收集器根据对象类型的GC. info,把该对象引用的所有对象入栈,即标记为灰色对象;步骤三、拷贝将Java SoC系统中可分配对象堆分为fromspace和tospace两个子空间,首先获取需要拷贝实例对象的大小,然后更新该对象引用的句柄结构信息,最后把一个非垃圾对象从子空间fromespace拷贝至子空间tospace中,完成实例数据的拷贝; 步骤四、清扫句柄拷贝结束后,检查usedLis链表中的句柄是否指向子空间tospace,如果不是,说明其指向的是垃圾对象,可以回收该句柄以重新分配利用,即将其添加到freeList链表;步骤五、清空子空间fromspace ;步骤六、子空间翻转原子性的翻转操作,交换指针值从而互换子空间fromspace和子空间tospace的角色。所述Java SoC系统中根集对象来源有两种I)方法区中的静态引用域表中的静态引用变量所指向的对象;2) mutator线程堆栈中的引用变量所指向的对象,当Java SoC系统内存不足或者系统初始化阶段完成时,只对根集来源I)中的对象进行扫描,当进入多线程实时任务阶段,周期性地扫描根集来源I)和根集来源2)。所述步骤二的标记操作只发生在子空间fromspace中,collector线程循环开始时,在子空间tospace分配新对象。本专利技术的有益效果I、本专利技术采用线程并发的方式支持增量收集,把线程分为mutator和collector两类mutator表示承担应用任务的用户线程,collector表示承担具体的GC(垃圾收集器)逻辑线程,防止垃圾收集工作和对象分配交织到一起,同时针对系统运行任务的不同,JavaSoC的生命周期分为系统初始化阶段和实时任务阶段两个阶段,提高了处理器的效率,节约了处理器资源。2、本专利技术借鉴Dijkstra经典的“白灰黑”三色图算法,将Java SoC的句柄池定义3个GC链表,freeList用于存储没有指向任何对象或者其指向的垃圾对象已经回收完毕的句柄,greyList用于存储所有已经被collector访问过但其引用变量没有遍历的对象句柄,usedList用于存储正指向一个对象的句柄。在GC周期内,collector会从某些根对象的句柄开始扫描整个句柄池,所有具有引用关系的对象都会经历一个变为灰色对象的阶段,它们的句柄都会压入greyList中;在清扫句柄阶段collector会从greyList中弹出灰色对象句柄并将其所指向的对象拷贝到tospace,相当于给对象着上黑色,并将其句柄加入usedList中;在翻转动作发生时,所有没有在usedList中的对象都成了不可触及的白色对象而被回收。用链表取代描述对象引用关系的“树”或者更复杂的“图结构”,采用堆栈LIFO形式实现的链表操作与树形遍历保持了兼容,避免了纯递归调用产生的不可预测的时间复杂度,满足嵌入式GC实时性要求。3、本专利技术中根集扫描根对象的来源包括方法区中静态引用域表中的静态引用变量所指向的对象和线程堆栈中的引用变量所指向的对象,借鉴SCJ规范的思想对线程模型简化,不允许处在调度序列中的mutator执行自阻塞(self-blocking)操作,同时赋予collector线程最长截止时间,即collector线程运行在最低优先级,只有等所有mutator线程从各自任务调用中返回时才启动collector线程,此时其他线程堆栈都为空,根对象只存在于静态域中,优点是GC不需要扫描堆栈,Java SoC在GC过程中也能获得良好的实时性能。4、本专利技术的拷贝对象时只需要赋值实例变量,然后更新句柄中的handle值指向新的地址,就能轻松完成整个拷贝操作,加速了并发-拷贝收集器的工作效率。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于堆栈体系结构的Java SoC系统的垃圾收集方法,其特征在于,它将JavaSoC系统的生命周期分为系统初始化阶段和实时任务阶段两个阶段,在Java SoC系统初始化阶段,由Java虚拟机主动调用垃圾收集器进行单线程显式调用垃圾收集;在发生“内存不足”异常时,由Java SoC系统触发调用垃圾收集器进行单线程显式调用垃圾收集;在多线程实时任务运行阶段,由一个并发的collector线程以周期T。调度垃圾收集器进行垃圾收集,其中,collector表示承担具体的垃圾收集器逻辑的线程,T。表示collector线程的周期。2.根据权利要求I所述的基于堆栈体系结构的JavaSoC系统的垃圾收集方法,其特征在于,所述Java SoC系统的句柄池定义三个GC链表,freeList用于存储没有指向任何对象或者其指向的垃圾对象已经回收完毕的句柄;greyList用于存储所有已经被collector线程访问过,但其引用变量没有遍历的对象句柄;usedList用于存储正指向一个对象的句柄。3.根据权利要求2所述的基于堆栈体系结构的JavaSoC系统的垃圾收集方法,其特征在于,所述垃圾收集器的垃圾收集的工作流程为 步骤一、对象扫描对Java SoC系统中的根集对象进行扫描,扫描过程中,把静态域表中所有引用的对象或者mutator线程的堆栈数据压入greyList构成的标记栈,其中,mutator表示承担应用任务的用户线程; 步骤二、标记从标记栈greyList中弹出一个对象引用,从其句柄中找到对象类型信息,获得该对象的实例数据类型的信息GC. info,按照在类中声明的先后顺序从低到高GC...

【专利技术属性】
技术研发人员:徐永键陆许明刘征杨德胜梁猷张煊文
申请(专利权)人:广州晶锐信息技术有限公司
类型:发明
国别省市:

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

1