专利名称:一种内存垃圾收集器中对象状态的阶段式跟踪记录方法
技术领域:
本发明涉及一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,属于编译器软件和运行时系统技术领域。
背景技术:
内存垃圾收集器(Garbage Collector)是Java虚拟机、C#虚拟机中管理对象内存空间的关键模块。对用户而言,使用Java或者C#等语言编程时,由于内存垃圾收集器的存在,只需在程序中申请对象空间,而对象的管理和空间释放,都由内存垃圾收集器自动完成,从而极大的提高程序的开发效率和运行可靠性。但由于内存垃圾收集器对内存对象的机械式管理,使得Java或者C#程序中的部分对象长期占用内存而得不到释放,从而影响内存的整体使用效率。因此,在虚拟机的内存垃圾收集器中建立一种针对每个对象生存周期 和生存状态的监控记录机制,可以寻找和定位那些长期占用内存而不释放的对象,并针对这些对象对程序进行优化,对于提高虚拟机的运行效率,具有重要的意义。
发明内容
针对现有技术中存在的问题,本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,对程序运行过程中申请的每一个对象的生存周期和生存状态进行阶段式跟踪记录,根据记录结果,寻找和定位那些长期占用内存而不释放的对象。将这些信息提供给程序员或者运行时系统后,针对这些对象对程序进行优化,对于提高虚拟机的运行效率,具有重要的意义。本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,包括以下几个步骤步骤一内存垃圾收集器完成当前的内存垃圾收集任务后,在阶段记录表中新增I个阶段记录;步骤二 判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器程序是否申请创建了新的对象,如果是,为每个新增对象Ox在阶段记录表的当前阶段记录中增加一个新项为“对象Ox:新申请”,如果不是,进入步骤三;步骤三判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器是否移动了已有对象,如果是,为每个被移动对象Oy在阶段记录表的当前阶段记录中增加一个新项为“对象Oy :移动”,如果不是,进入步骤四;步骤四判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器是否释放了已有对象,如果是,为每个被释放对象Oz在阶段记录表的当前阶段记录中增加一个新项为“对象Oz :释放”,如果不是则结束。本发明的优点在于
(I)本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,在内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的阶段式跟踪记录机制,这种方法和机制目前不存在于任何内存垃圾收集器中;(2)本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法所记录的对象状态信息充分全面;(3)本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,这种阶段式跟踪记录方法对程序运行效率的影响较小;(4)本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法对内存的占用和消耗较低。
图I.本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法的流程 图;图2.本发明中阶段式跟踪记录表的结构示意图
具体实施例方式下面将结合附图对本发明作进一步的详细说明。本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,如图I所示,包括以下几个步骤步骤一内存垃圾收集器完成当前的内存垃圾收集任务后,在阶段记录表中新增I个阶段记录。内存垃圾收集器每完成一次当前的内存垃圾收集任务,便会在阶段记录表中增加一个阶段记录,如图2所示。例如,内存垃圾收集器第I次完成内存垃圾收集任务后,将产生图2中“第I阶段记录”,第n次完成后,将产生图2中“第n阶段记录”,直至程序运行结束。每个阶段分别记录当前内存垃圾收集器完成后,对象状态的改变。例如,“第I阶段记录”记录了当前内存垃圾收集器完成后,新申请创建了对象Al (对应“对象Al:新申请”项),移动了对象A2 (对应“对象A2:移动”项),释放了对象Ax (对应“对象Ax:释放”)等内容。根据Java程序或者C语言程序的运行特点,对象状态的改变呈周期性,这使得在开始阶段或其中某一些阶段的记录项较多,而紧随其后的阶段记录项较少。因此,本发明采用的对象阶段式跟踪记录方法,将具有较小的平均程序负载。步骤二 判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器程序是否申请创建了新的对象,如果是,为每个新增对象Ox在阶段记录表的当前阶段记录中增加一个新项“对象Ox :新申请”,如果不是,进入步骤三。其中Ox表示当前新增对象,可以是这个对象的地址,或者其它能够唯一代表该对象的符号或数据。步骤三判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器是否移动了已有对象,如果是,为每个被移动对象Oy在阶段记录表的当前阶段记录中增加一个新项“对象Oy :移动”,如果不是,进入步骤四。其中Oy表示当前被移动对象,可以是这个对象的地址,或者其它能够唯一代表该对象的符号或数据。
步骤四判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器是否释放了已有对象,如果是,为每个被释放对象Oz在阶段记录表的当前阶段记录中增加一个新项“对象Oz :释放”,如果不是则结束。其中Oz表示当前被释放对象,可以是这个对象的地址,或者其它能够唯一代表该对象的符号或数据。权利要求
1.一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,其特征在于包括以下几个步骤 步骤一内存垃圾收集器完成当前的内存垃圾收集任务后,在阶段记录表中新增I个阶段记录; 步骤二 判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器程序是否申请创建了新的对象,如果是,为每个新增对象Ox在阶段记录表的当前阶段记录中增加一个新项为“对象Ox :新申请”,如果不是,进入步骤三;0x表示当前新增对象; 步骤三判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器是否移动了已有对象,如果是,为每个被移动对象Oy在阶段记录表的当前阶段记录中增加一个新项为“对象Oy :移动”,如果不是,进入步骤四; Oy表示当前被移动对象; 步骤四判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器是否释放了已有对象,如果是,为每个被释放对象Oz在阶段记录表的当前阶段记录中增加一个新项为“对象Oz :释放”,如果不是则结束;0z表示当前被释放对象。
全文摘要
本发明提出一种内存垃圾收集器中对象状态的阶段式跟踪记录方法,属于编译器软件和运行时系统技术领域,包括内存垃圾收集器完成当前的内存垃圾收集任务后,在阶段记录表中新增1个阶段记录、判断内存垃圾收集器程序是否申请创建了新的对象、判断内存垃圾收集器是否移动了已有对象以及判断内存垃圾收集器是否释放了已有对象等步骤。本发明在内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的阶段式跟踪记录机制,这种方法和机制目前不存在于任何内存垃圾收集器中;且所记录的对象状态信息充分全面,阶段式跟踪记录方法对程序运行效率的影响较小;对内存的占用和消耗较低。
文档编号G06F12/02GK102722445SQ20121018514
公开日2012年10月10日 申请日期2012年6月6日 优先权日2012年6月6日
发明者史晓华, 孙清越 申请人:北京航空航天大学