CN102722447B - 一种内存垃圾收集器中对象状态的增量式跟踪记录方法 - Google Patents
一种内存垃圾收集器中对象状态的增量式跟踪记录方法 Download PDFInfo
- Publication number
- CN102722447B CN102722447B CN201210185833.0A CN201210185833A CN102722447B CN 102722447 B CN102722447 B CN 102722447B CN 201210185833 A CN201210185833 A CN 201210185833A CN 102722447 B CN102722447 B CN 102722447B
- Authority
- CN
- China
- Prior art keywords
- internal memory
- garbage collector
- memory garbage
- obj state
- record
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Memory System (AREA)
Abstract
本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,属于编译器软件和运行时系统技术领域,包括:内存垃圾收集器创建对象并增加该对象的对象序列号;内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行增量式的记录,并将记录结果保存在对象状态记录表中;判断内存垃圾收集器的程序是否申请创建了新的对象;判断内存垃圾收集器的程序是否访问了已有的对象;判断内存垃圾收集器的程序是否移动了已有对象;判断存垃圾收集过程中是否释放了已有对象。本发明在内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的增量式跟踪记录机制,这种机制目前不存在于任何内存垃圾收集器中,对程序运行效率的影响较小。
Description
技术领域
本发明涉及一种内存垃圾收集器中对象状态的增量式跟踪记录方法,属于编译器软件和运行时系统技术领域。
背景技术
内存垃圾收集器(Garbage Collector)是Java虚拟机、C#虚拟机中管理对象内存空间的关键模块。对用户而言,使用Java或者C#等语言编程时,由于内存垃圾收集器的存在,只需在程序中申请对象空间,而对象的管理和空间释放,都由内存垃圾收集器自动完成,从而极大的提高程序的开发效率和运行可靠性。但由于内存垃圾收集器对内存对象的机械式管理,使得Java或者C#程序中的部分对象长期占用内存而得不到释放,从而影响内存的整体使用效率。因此,在虚拟机的内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的监控记录机制,可以寻找和定位那些长期占用内存而不释放的对象,并针对这些对象对程序进行优化,对于提高虚拟机的运行效率,具有重要的意义。
发明内容
针对现有技术中存在的问题,本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,对程序运行过程中申请的每一个对象的生存周期和生存状态进行增量式跟踪记录,根据记录结果,寻找和定位那些长期占用内存而不释放的对象。将这些信息提供给程序员或者运行时系统后,针对这些对象对程序进行优化,对于提高虚拟机的运行效率,具有重要的意义。
本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,包括以下几个步骤:
步骤一:内存垃圾收集器创建一个新的对象的同时,增加该对象的对象序列号GID值,形成现有的对象存储信息;
步骤二:内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行记录,并将记录结果保存在对象状态记录表中,对象状态记录表由一个索引表和对象状态记录组成,索引表中的每一项都对应一个对象状态记录;
步骤三:判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否申请创建了新的对象,如果是,每增加一个新的对象,在索引表中增加一个以该对象的GID值为下标的新项,并相应增加一个该对象的对象状态记录,并将该对象的创建时间记录在内,如果不是,进入步骤四;
步骤四:判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否访问了已有的对象,如果是,每一个被访问的对象,通过索引表,以该被访问对象的GID值为下标,访问到该对象的对象状态记录,将该对象的最近被访问时间记录在对象状态记录中,如果不是,进入步骤五;
步骤五:判断本次内存垃圾收集器执行内存垃圾收集过程中是否移动了已有对象,如果是,每一个被移动的对象,通过索引表,以该对象的GID值为下标,访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项内存地址记录信息,标记为“GC x:内存地址”,其中次数x代表内存垃圾收集器的第几次调用该对象。如果不是,进入步骤六;
步骤六:判断本次内存垃圾收集器执行内存垃圾收集过程中内存垃圾收集器的程序是否释放了已有对象,如果是,每一个被释放的对象,通过索引表,以该对象的GID值为下标,访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项释放的记录信息,标记为“GC z:释放”,z代表这是内存垃圾收集器第z次执行内存垃圾收集任务,如果不是则结束。
本发明的优点在于:
(1)本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,在内存垃圾收集器中建立一种针对每个对象生存周期和生存状态的增量式跟踪记录机制,这种机制目前不存在于任何内存垃圾收集器中;
(2)本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,这种增量式跟踪记录方法对程序运行效率的影响较小;
(3)本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法所记录的对象生存周期和生存状态信息充分全面;
(4)本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法对内存的占用和消耗较低。
附图说明
图1:本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法的流程图;
图2:本发明中对象、GID项、索引表和对象状态记录之间的关系示意图。
具体实施方式
下面将结合附图对本发明作进一步的详细说明。
本发明提出一种内存垃圾收集器中对象状态的增量式跟踪记录方法,如图1所示,包括以下几个步骤:
步骤一:内存垃圾收集器创建一个新的对象的同时,增加该对象的对象序列号,即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次执行内存垃圾收集任务,如果不是则结束。
Claims (1)
1.一种内存垃圾收集器中对象状态的增量式跟踪记录方法,其特征在于:包括以下几个步骤:
步骤一:内存垃圾收集器创建一个新的对象的同时,增加该对象的对象序列号GID值,形成现有的对象存储信息;GID项为对应对象所新增的数据成员,内存垃圾收集器每次申请增加新的对象,便会赋予该对象一个唯一的对象序列号即GID值,GID值取值为非零的正整数;
步骤二:内存垃圾收集器完成当前的内存垃圾收集任务后,对每个对象的状态进行记录,并将记录结果保存在对象状态记录表中,对象状态记录表由一个索引表和对象状态记录组成,索引表中的每一项都对应一个对象状态记录;所述的对象状态记录还包括“GC x:内存地址”以及“GC z:释放”的信息,其中“GC x:内存地址”的含义为第x次内存垃圾收集完成时,该对象在内存中的地址;“GC z:释放”的含义为第z次内存垃圾收集完成时,该对象已被释放;
步骤三:判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否申请创建了新的对象,如果是,每增加一个新的对象,在索引表中增加一个以该对象的GID值为下标的新项,并相应增加一个该对象的对象状态记录,并将该对象的创建时间记录在内,如果不是,进入步骤四;
步骤四:判断从上一次内存垃圾收集器执行完内存垃圾收集任务到本次执行完内存垃圾收集任务的过程中,内存垃圾收集器的程序是否访问了已有的对象,如果是,每一个被访问的对象,通过索引表,以该被访问对象的GID值为下标,访问到该对象的对象状态记录,将该对象的最近被访问时间记录在对象状态记录中,如果不是,进入步骤五;
步骤五:判断本次内存垃圾收集器执行内存垃圾收集过程中是否移动了已有对象,如果是,每一个被移动的对象,通过索引表,以该对象的GID值为下标,访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项内存地址记录信息,标记为“GC x:内存地址”,其中次数x代表内存垃圾收集器的第几次调用该对象;如果不是,进入步骤六;
步骤六:判断本次内存垃圾收集器执行内存垃圾收集过程中内存垃圾收集器的程序是否释放了已有对象,如果是,每一个被释放的对象,通过索引表,以该对象的GID值为下标,访问到该对象的对象状态记录,在该对象的对象状态记录中增加一项记录信息,标记为“GCz:释放”,z代表这是内存垃圾收集器第z次执行内存垃圾收集任务,如果不是则结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210185833.0A CN102722447B (zh) | 2012-06-06 | 2012-06-06 | 一种内存垃圾收集器中对象状态的增量式跟踪记录方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210185833.0A CN102722447B (zh) | 2012-06-06 | 2012-06-06 | 一种内存垃圾收集器中对象状态的增量式跟踪记录方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102722447A CN102722447A (zh) | 2012-10-10 |
CN102722447B true CN102722447B (zh) | 2015-01-14 |
Family
ID=46948221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210185833.0A Expired - Fee Related CN102722447B (zh) | 2012-06-06 | 2012-06-06 | 一种内存垃圾收集器中对象状态的增量式跟踪记录方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102722447B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103218303B (zh) * | 2013-03-27 | 2016-08-10 | 北京航空航天大学 | 基于地址链的内存垃圾收集器中对象状态的跟踪记录方法 |
CN106293878B (zh) * | 2016-08-05 | 2019-08-27 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN106293939B (zh) * | 2016-08-05 | 2019-10-18 | 北京航空航天大学 | 一种在内存垃圾收集器中动态重用对象的方法 |
US11416390B2 (en) * | 2020-09-09 | 2022-08-16 | International Business Machines Corporation | Tri-color bitmap array for garbage collection |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046755A (zh) * | 2006-03-28 | 2007-10-03 | 郭明南 | 一种计算机自动内存管理的系统及方法 |
US20090070776A1 (en) * | 2007-09-07 | 2009-03-12 | Oracle International Corporation | System and method to improve memory usage in virtual machines running as hypervisor guests |
CN102023891A (zh) * | 2010-12-20 | 2011-04-20 | 复旦大学 | 基于Java虚拟机的并发垃圾收集器框架 |
US20120072654A1 (en) * | 2007-12-27 | 2012-03-22 | Sandisk Enterprise Ip Llc | Flash Memory Controller Garbage Collection Operations Performed Independently In Multiple Flash Memory Groups |
-
2012
- 2012-06-06 CN CN201210185833.0A patent/CN102722447B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046755A (zh) * | 2006-03-28 | 2007-10-03 | 郭明南 | 一种计算机自动内存管理的系统及方法 |
US20090070776A1 (en) * | 2007-09-07 | 2009-03-12 | Oracle International Corporation | System and method to improve memory usage in virtual machines running as hypervisor guests |
US20120072654A1 (en) * | 2007-12-27 | 2012-03-22 | Sandisk Enterprise Ip Llc | Flash Memory Controller Garbage Collection Operations Performed Independently In Multiple Flash Memory Groups |
CN102023891A (zh) * | 2010-12-20 | 2011-04-20 | 复旦大学 | 基于Java虚拟机的并发垃圾收集器框架 |
Non-Patent Citations (2)
Title |
---|
Jing-Mei Li,et al.《Garbage collection algorithm based on embedded KVM 》.《IEEE,Multimedia Technology (ICMT), 2011 International Conference on Digital Object Identifier》.2011,3535-3538. * |
张宁,等.《渐进式回收循环垃圾以降低系统内存需求》.《计算机辅助设计与图形学学报》.2009,第21卷(第10期),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN102722447A (zh) | 2012-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102722447B (zh) | 一种内存垃圾收集器中对象状态的增量式跟踪记录方法 | |
US8868623B2 (en) | Enhanced garbage collection in a multi-node environment | |
CN103339616B (zh) | 用于基于区域的垃圾收集器中的递增类卸载的方法和装置 | |
US9189393B2 (en) | Computer, control method of computer, and recording medium | |
CN102722432B (zh) | 追踪内存访问的方法和装置 | |
CN103797436A (zh) | 用于计算装置的动态电力优化 | |
CN102122337B (zh) | 一种核电站仪控仿真系统的数据回放方法 | |
CN101299192B (zh) | 一种非对齐访存的处理方法 | |
EP4086767A1 (en) | Methods and apparatus to manage workload memory allocation | |
CN105224474B (zh) | 固态硬盘闪存转换层的实现系统和闪存转换层的实现装置 | |
CN101944114A (zh) | 内存数据库和物理数据库间的数据同步方法 | |
CN100388234C (zh) | 一种基于有限状态机的对内存变量改写进行监控的方法 | |
CN102810184A (zh) | 一种动态执行工作流的方法、装置及企业系统 | |
CN101639803A (zh) | 多线程应用系统的异常处理方法和异常处理装置 | |
CN103136029A (zh) | 即时编译系统自适应调优方法 | |
CN102243596A (zh) | 一种自适应动态代码卸载方法 | |
CN103092866A (zh) | 数据监控方法及监控装置 | |
CN103927244A (zh) | 一种基于动态代理实现的插件调度过程监控的方法 | |
CN103092618A (zh) | 基于软件Cache的Dalvik虚拟机JIT加速方法 | |
CN103647824A (zh) | 一种存储资源优化调度发现算法 | |
CN102722445B (zh) | 一种内存垃圾收集器中对象状态的阶段式跟踪记录方法 | |
CN110569517B (zh) | 一种用于风电机组主控系统的报警优化设计方法 | |
CN104915292A (zh) | 一种linux内核模块动态打桩的方法 | |
CN101751260A (zh) | 一种基于动态标签的业务对象持久化处理方法 | |
CN102023896A (zh) | 基于Java虚拟机的并发垃圾收集器的调度器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150114 Termination date: 20150606 |
|
EXPY | Termination of patent right or utility model |