一种内存垃圾收集器中对象状态的增量式跟踪记录方法技术

技术编号:7837753 阅读:247 留言:0更新日期:2012-10-12 02:34
本发明专利技术提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,属于编译器软件和运行时系统技术领域,包括:内存垃圾收集器创建对象并增加该对象的对象序列号;内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行增量式的记录,并将记录结果保存在对象状态记录表中;判断内存垃圾收集器的程序是否申请创建了新的对象;判断内存垃圾收集器的程序是否访问了已有的对象;判断内存垃圾收集器的程序是否移动了已有对象;判断存垃圾收集过程中是否释放了已有对象。本发明专利技术在内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的增量式跟踪记录机制,这种机制目前不存在于任何内存垃圾收集器中,对程序运行效率的影响较小。

【技术实现步骤摘要】

本专利技术涉及,属于编译器软件和运行时系统

技术介绍
内存垃圾收集器(Garbage Collector)是Java虚拟机、C#虚拟机中管理对象内存空间的关键模块。对用户而言,使用Java或者C#等语言编程时,由于内存垃圾收集器的存在,只需在程序中申请对象空间,而对象的管理和空间释放,都由内存垃圾收集器自动完成,从而极大的提高程序的开发效率和运行可靠性。但由于内存垃圾收集器对内存对象的机械式管理,使得Java或者C#程序中的部分对象长期占用内存而得不到释放,从而影响内 存的整体使用效率。因此,在虚拟机的内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的监控记录机制,可以寻找和定位那些长期占用内存而不释放的对象,并针对这些对象对程序进行优化,对于提高虚拟机的运行效率,具有重要的意义。
技术实现思路
针对现有技术中存在的问题,本专利技术提出,对程序运行过程中申请的每一个对象的生存周期和生存状态进行增量式跟踪记录,根据记录结果,寻找和定位那些长期占用内存而不释放的对象。将这些信息提供给程序员或者运行时系统后,针对这些对象对程序进行优化,对于提高虚拟机的运行效率,具有重要的意义。本专利技术提出,包括以下几个步骤步骤一内存垃圾收集器创建一个新的对象的同时,增加该对象的对象序列号GID值,形成现有的对象存储信息;步骤二 内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行记录,并将记录结果保存在对象状态记录表中,对象状态记录表由一个索引表和对象状态记录组成,索引表中的每一项都对应一个对象状态记录;步骤三判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否申请创建了新的对象,如果是,每增加一个新的对象,在索引表中增加一个以该对象的GID值为下标的新项,并相应增加一个该对象的对象状态记录,并将该对象的创建时间记录在内,如果不是,进入步骤四;步骤四判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否访问了已有的对象,如果是,每一个被访问的对象,通过索引表,以该被访问对象的GID值为下标,访问到该对象的对象状态记录,将该对象的最近被访问时间记录在对象状态记录中,如果不是,进入步骤五;步骤五判断本次内存垃圾收集器执行内存垃圾收集过程中是否移动了已有对象,如果是,每一个被移动的对象,通过索引表,以该对象的GID值为下标,访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项内存地址记录信息,标记为“GC X内存地址”,其中次数X代表内存垃圾收集器的第几次调用该对象。如果不是,进入步骤六;步骤六判断本次内存垃圾收集器执行内存垃圾收集过程中内存垃圾收集器的程序是否释放了已有对象,如果是,每一个被释放的对象,通过索引表,以该对象的GID值为下标,访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项释放的记录信息,标记为“GC z:释放”,z代表这是内存垃圾收集器第z次执行内存垃圾收集任务,如果不是则结束。本专利技术的优点在于(I)本专利技术提出,在内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的增量式跟踪记录机制,这种机制目前不存在于任何内存垃圾收集器中; (2)本专利技术提出,这种增量式跟踪记录方法对程序运行效率的影响较小;(3)本专利技术提出所记录的对象生存周期和生存状态信息充分全面;(4)本专利技术提出对内存的占用和消耗较低。附图说明图I :本专利技术提出的流程 图;图2 :本专利技术中对象、GID项、索引表和对象状态记录之间的关系不意图。具体实施例方式下面将结合附图对本专利技术作进一步的详细说明。本专利技术提出,如图I所示,包括以下几个步骤步骤一内存垃圾收集器创建一个新的对象的同时,增加该对象的对象序列号,即GID值,形成现有的对象存储信息,即对象在内存中的映像。如图2所示,GID项为对应对象所新增的数据成员,内存垃圾收集器每次申请增加新的对象,便会赋予该对象一个唯一的对象序列号即GID值,GID值取值为非零的正整数。步骤二 内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行记录,并将记录结果保存在对象状态记录表中,如图2所示,对象状态记录表由一个索引表和一系列的对象状态记录组成。索引表包括的每一项(项数与GID值的个数一致)都对应一个对象状态记录,对象状态记录包含对象的创建时间、对象的最近被访问时间等信息。对象状态记录还包括“GC X内存地址”以及“GC z:释放”,“GC x:内存地址”的含义为第X次内存垃圾收集完成时,该对象在内存中的地址;“GC z:释放”的含义为第z次内存垃圾收集完成时,该对象已被释放。由于每个对象在整个程序运行周期中,对应且唯一对应索引表中的一项,因此每个对象的对象状态记录的信息是递增记录的,这就是本专利技术被称为“增量式跟踪记录方法”的原因。这样的跟踪记录方法可以有效降低程序的负载,提闻运行效率。步骤三判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否申请创建了新的对象,如果是,每增加一个新的对象,在索引表中增加一个以该对象的GID值为下标的新项,并相应增加一个该对象的对象状态记录,并将该对象的创建时间记录在内。如果不是,进入步骤四。 步骤四判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否访问了已有的对象,如果是,每一个被访问的对象,通过索引表,以该被访问对象的GID值为下标,快速访问到该对象的对象状态记录,将该对象的最近被访问时间记录在对象状态记录中。如果不是,进入步骤五。步骤五判断本次内存垃圾收集器执行内存垃圾收集过程中是否移动了已有对象,如果是,每一个被移动的对象,通过图2中索引表,以该对象的GID值为下标,快速访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项内存地址记录信息,标记为“GC x:内存地址”,其中次数X代表内存垃圾收集器第几次调用该对象。如果不是,进入步骤六;步骤六判断本次内存垃圾收集器执行内存垃圾收集过程中内存垃圾收集器的程序是否释放了已有对象,如果是,每一个被释放的对象,通过图2中索引表,以该对象的GID值为下标,快速访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项释放的记录信息,标记为“GC z:释放”,其中z代表这是内存垃圾收集器第z次执行内存垃圾收集任务,如果不是则结束。本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种内存垃圾收集器中对象状态的增量式跟踪记录方法,其特征在于包括以下几个步骤 步骤一内存垃圾收集器创建一个新的对象的同时,增加该对象的对象序列号GID值,形成现有的对象存储信息; 步骤二 内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行记录,并将记录结果保存在对象状态记录表中,对象状态记录表由一个索引表和对象状态记录组成,索引表中的每一项都对应一个对象状态记录; 步骤三判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否申请创建了新的对象,如果是,每增加一个新的对象,在索引表中增加一个以该对象的GID值为下标的新项,并相应增加一个该对象的对象状态记录,并将该对象的创建时间记录在内,如果不是,进入步骤四; 步骤四判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否访问了已有的对象,如果是,每一个被访问的对象,通过索引表,以该被访问对象的GID值为下标,访问到该对象的对象状态记录,将该对象的最近被访问时间记录在对象状态记录中,如果不是,进入步骤五; 步骤五判断本次内存垃圾收集器执行内存垃圾收集过程中是否移动了已有对象,如果是,每一个被移动的对象,通过索...

【专利技术属性】
技术研发人员:史晓华
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:

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

1