CN105260174B - 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法 - Google Patents
实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法 Download PDFInfo
- Publication number
- CN105260174B CN105260174B CN201510591571.1A CN201510591571A CN105260174B CN 105260174 B CN105260174 B CN 105260174B CN 201510591571 A CN201510591571 A CN 201510591571A CN 105260174 B CN105260174 B CN 105260174B
- Authority
- CN
- China
- Prior art keywords
- equivalence class
- memory
- internal storage
- storage state
- equivalence
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明是一种实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法。本发明方法对Java虚拟机上运行的每个方法,将方法中的所有等价类都记录在一个等价类链表中,方法内每一个对象都将包含在某一等价类中,表示内存信息的内存对象也包含在等价类中;链表中每个等价类的结构包括等价类ID、内存等价类Tag、对象集合、对象成员变量和等价类内存状态,内存等价类Tag标识等价类是否为内存信息等价类,等价类内存状态存储等价类所在的内存区域;利用等价类链表进行对象内存状态跟踪。本发明可以对程序中所有对象的所有可能的内存状态进行记录,为实时虚拟机的后续优化工作做准备,比如对象引用检查的消除等,从而提高了实时性能。
Description
技术领域
本发明属于Java计算机应用技术领域,具体是一种实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法。
背景技术
在Java实时规范(Real Time Specification for Java,RTSJ)中,为避免内存垃圾收集器(Garbage Collector,GC)对实时性的影响,RTSJ在标准Java堆上扩展定义了不受GC控制的不朽内存区域和作用域内存区域;同时为避免悬空引用的出现,RTSJ定义了不同内存区域中对象的引用规则,并且Java虚拟机将在运行时针对每一条对象赋值语句进行引用规则正确性的检查。对象引用规则的引入,增加了实时Java程序的开发难度;而运行时对象引用检查在一定程度上影响了系统的实时性能。
发明内容
本发明针对上述问题,提出一种创新的基于等价类的对象内存状态的记录跟踪方法,可以对程序中所有对象的所有可能的内存状态进行记录。
本发明实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法,实现步骤如下:
首先,对Java虚拟机上运行的每个方法,将方法中的所有等价类都记录在一个等价类链表中,方法内每一个对象都将包含在某一等价类中,表示内存信息的内存对象也包含在等价类中。
链表中每个等价类的结构包括等价类ID、内存等价类Tag、对象集合、对象成员变量和等价类内存状态;等价类ID用于唯一标识一个等价类,内存等价类Tag用于标识等价类是否为内存信息等价类,对象集合包含等价类中的所有对象,对象成员变量包含等价类中所有对象的域成员变量,等价类内存状态存储等价类所在的内存区域。
等价类内存状态指向某一等价类,被指向等价类为内存信息等价类,表示了当前等价类所在的内存区域。如果当前等价类的内存等价类Tag标识也为内存信息等价类,此时两个内存等价类的嵌套关系,映射表示RTSJ中作用域内存的嵌套关系。
然后,基于等价类链表进行对象内存状态跟踪。
本发明的优点与积极效果在于:利用本发明基于等价类的对象内存状态的记录跟踪方法,可以对程序中所有对象的所有可能的内存状态进行记录,程序员或实时Java虚拟机在获得此类内存信息后,一方面可以辅助程序员在开发过程中避免破坏对象引用规则,从而提高开发效率;另一方面可以为实时虚拟机的后续优化工作做准备,比如对象引用检查的消除等,从而提高实时性能。
附图说明
图1是本发明的基于等价类的对象内存状态记录结构的示意图;
图2是本发明的基于等价类的对象内存状态跟踪的流程示意图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明在符合RTSJ的实时Java虚拟机平台上实现。首先,对Java虚拟机上运行的每个方法,建立一个等价类链表,实现对象内存状态记录,如图1所示。
图1中①代表等价类链表。某个方法内的所有等价类都在此链表中,方法内每一个对象都将包含在某一等价类中。图中Alias表示等价类,object表示对象。
图1中②代表等价类结构。等价类ID用于唯一标识一个等价类,此ID用于等价类合并等操作;在实时Java中,内存信息由对象表示,所以内存信息也是以等价类的方式组织。所述的内存信息是指内存区域信息,也称内存状态。内存等价类Tag(标签)用于标识当前某一等价类是否为内存信息等价类;对象集合包含了该等价类中的所有对象,如图1③所示;对象成员变量包含了等价类中所有对象的域成员变量,该类变量用于抽象表示对象之间的引用关系,即等价类之间的引用关系;等价类内存状态代表了当前等价类的所有可能存在的内存区域。如图1中④箭头所示,等价类内存状态指向某一等价类,该被指向等价类为内存信息等价类,表示了当前等价类所在的内存区域。如果当前等价类的内存等价类Tag标识也为内存信息等价类,此时两个内存信息等价类的嵌套关系,可以映射表示RTSJ中作用域内存的嵌套关系。图1所示的等价类链表和等价类结构能表示等价类的内存状态。如图1中⑤所示,在传统的逃逸分析方法中,逃逸状态为简单的三个值:stack(栈),thread(线程)和global(全局);在实时Java中,表示内存信息的内存对象,与普通的java对象一样包含在等价类中,所以可以用基于等价类的内存状态,即图1所示结构来代表逃逸状态。虚线箭头代表传统逃逸到基于等价类的逃逸的转变。
基于图1所示的等价类链表,进行对象内存状态跟踪记录的工作原理如图2所示。
如图2所示,过程内传播是指逃逸状态(内存状态)在方法内进行传播;过程间传播是指逃逸状态通过方法调用和返回值在方法间进行传播。
步骤1:过程内传播开始后,首先判断当前方法是否有内存信息,若有,则继续步骤2;若无,则继续步骤4;
步骤2:判断当前方法内是否存在包含实例对象的等价类,若有,则将内存信息保存到等价类内存状态区域,即图1等价类结构的等价类内存状态中,然后继续步骤3;若无,则继续步骤3;
步骤3:判断当前方法是否存在子方法,若有,则将内存信息传递给对应子方法,在子方法的相关等价类的等价类内存状态中记录;若无,则继续步骤4;
如果父方法在特定内存区域执行,该内存区域由内存对象表示;子方法没有设定在特定内存区域执行,则其子方法也在父方法所在的内存区域执行。传递的内存信息(内存状态)即逃逸状态,需要在子方法的相关等价类的等价类内存状态中进行记录。
步骤4:过程内传播结束后,开始过程间传播。首先判断是否存在对象通过参数进行传递,若有,则将内存信息通过参数传递给子方法的等价类,在子方法对应的等价类的等价类内存状态中记录,然后继续步骤5;若无,则继续步骤5;
步骤5:判断是否存在对象通过返回值传递,若有,则将内存信息通过返回值传递给其父方法中对应的等价类,在父方法对应的等价类的等价类内存状态中记录,过程间传播结束;若无,则直接过程间传播结束。
如果子方法没有内存信息时,父方法的内存信息传递给子方法;如果子方法也被设定在不同于父方法的内存区域运行,即子方法也有自己的内存信息,则不需要将父方法的内存信息传递给子方法。
通过基于等价类的内存状态的跟踪记录方法,可以完备且有效的记录等价类中所有对象的内存信息,能有效降低实时Java开发难度,并且为实时Java虚拟机后续有关内存优化工作做充分准备。
Claims (1)
1.一种实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法,其特征在于,实现步骤包括:
首先,对于实时Java虚拟机上运行的每个方法,将方法中的所有等价类都记录在一个等价类链表中,方法内每一个对象都将包含在某一等价类中,表示内存信息的内存对象也包含在等价类中;
链表中每个等价类的结构包括等价类ID、内存等价类Tag、对象集合、对象成员变量和等价类内存状态;等价类ID用于唯一标识一个等价类,内存等价类Tag用于标识等价类是否为内存信息等价类,对象集合包含等价类中的所有对象,对象成员变量包含等价类中所有对象的域成员变量,等价类内存状态存储等价类所在的内存区域;
等价类内存状态指向某一等价类,被指向等价类为内存信息等价类,表示了当前等价类所在的内存区域;如果当前等价类的内存等价类Tag标识也为内存信息等价类,此时两个内存信息等价类的嵌套关系,映射表示Java实时规范中作用域内存的嵌套关系;
然后,基于等价类链表进行对象内存状态跟踪,实现步骤如下:
步骤1:过程内传播开始,判断当前方法是否有内存信息,若有,继续步骤2;若无,继续步骤4;过程内传播是指逃逸状态在方法内进行传播;
步骤2:判断当前方法内是否存在包含实例对象的等价类,若有,则将内存信息保存到对应等价类结构的等价类内存状态中,然后继续步骤3;若无,则继续步骤3;
步骤3:判断当前方法是否存在子方法,若有,则将内存信息传递给对应子方法,在子方法的相关等价类的等价类内存状态中记录;若无,则继续步骤4;
步骤4:过程内传播结束后,开始过程间传播;首先判断是否存在对象通过参数进行传递,若有,则将内存信息通过参数传递给子方法的等价类,在子方法对应的等价类的等价类内存状态中记录,然后继续步骤5;若无,则继续步骤5;过程间传播是指逃逸状态通过方法调用和返回值在方法间进行传播;
步骤5:判断是否存在对象通过返回值传递,若有,则将内存信息通过返回值传递给其父方法中对应的等价类,在父方法对应的等价类的等价类内存状态中记录,过程间传播结束;若无,则直接过程间传播结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510591571.1A CN105260174B (zh) | 2015-09-16 | 2015-09-16 | 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510591571.1A CN105260174B (zh) | 2015-09-16 | 2015-09-16 | 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105260174A CN105260174A (zh) | 2016-01-20 |
CN105260174B true CN105260174B (zh) | 2018-09-28 |
Family
ID=55099878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510591571.1A Active CN105260174B (zh) | 2015-09-16 | 2015-09-16 | 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105260174B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106293878B (zh) * | 2016-08-05 | 2019-08-27 | 北京航空航天大学 | 一种在jvm中动态计算对象重用价值的方法 |
CN108132863A (zh) * | 2017-12-26 | 2018-06-08 | 东软集团股份有限公司 | 内存检测方法、装置、计算机可读存储介质及计算机 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046755A (zh) * | 2006-03-28 | 2007-10-03 | 郭明南 | 一种计算机自动内存管理的系统及方法 |
CN101339533A (zh) * | 2007-07-04 | 2009-01-07 | 国际商业机器公司 | 基于分区的诊断Java系统的内存泄漏的方法及装置 |
CN102722432A (zh) * | 2011-03-29 | 2012-10-10 | 国际商业机器公司 | 追踪内存访问的方法和装置 |
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN104636259A (zh) * | 2015-03-18 | 2015-05-20 | 厦门雅迅网络股份有限公司 | 一种基于运行期动态跟踪的函数执行超时与死锁检测方法 |
-
2015
- 2015-09-16 CN CN201510591571.1A patent/CN105260174B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046755A (zh) * | 2006-03-28 | 2007-10-03 | 郭明南 | 一种计算机自动内存管理的系统及方法 |
CN101339533A (zh) * | 2007-07-04 | 2009-01-07 | 国际商业机器公司 | 基于分区的诊断Java系统的内存泄漏的方法及装置 |
CN102722432A (zh) * | 2011-03-29 | 2012-10-10 | 国际商业机器公司 | 追踪内存访问的方法和装置 |
CN104636256A (zh) * | 2015-02-17 | 2015-05-20 | 中国农业银行股份有限公司 | 一种内存访问异常的检测方法及装置 |
CN104636259A (zh) * | 2015-03-18 | 2015-05-20 | 厦门雅迅网络股份有限公司 | 一种基于运行期动态跟踪的函数执行超时与死锁检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105260174A (zh) | 2016-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10878239B2 (en) | Recognizing carbon-saving behaviors from images | |
CN107577483B (zh) | 组件工程调用主工程代码的方法、存储介质、设备及系统 | |
JP2020535555A5 (zh) | ||
WO2015030961A3 (en) | Acquiring online meeting data relating to an online meeting | |
CN110908641B (zh) | 基于可视化的流计算平台、方法、设备和存储介质 | |
JP6756079B2 (ja) | 人工知能に基づく三元組チェック方法、装置及びコンピュータプログラム | |
US9483298B2 (en) | Converting virtual machine I/O requests | |
RU2013114475A (ru) | Влияние опыта взаимодействия пользователя на основании определенного статуса | |
CN106126731B (zh) | 一种获取Elasticsearch分页数据的方法及装置 | |
CN103493025B (zh) | 用于存储器管理的保守垃圾收集和经标记的整数 | |
CN105260174B (zh) | 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法 | |
CN103309446B (zh) | 以人类双手为载体的虚拟数据获取与传递系统 | |
CN108205566A (zh) | 一种基于轨迹对点云进行管理的方法及装置、导航设备 | |
CN106919501A (zh) | 基于缺陷模式的静态分析方法和工具 | |
CN103092759A (zh) | 一种嵌入式环境下的代码动态性能剖析器 | |
CN109978430A (zh) | 一种解析用户地址的方法、装置、服务器及存储介质 | |
KR101634118B1 (ko) | 메모리 관리 장치 및 방법 | |
CN104572876A (zh) | 一种软件对应配置文件的读取方法和装置 | |
JP2016508636A5 (zh) | ||
JP2016506001A5 (zh) | ||
CN106354633A (zh) | 基于算法插件的任务调度表生成方法 | |
CN106663160B (zh) | 一种技能包的搜索与定位方法、系统及机器人 | |
Raheja et al. | An efficient code clone detection model on Java byte code using hybrid approach | |
US9483332B2 (en) | Event processing method in stream processing system and stream processing system | |
CN105700931A (zh) | 一种代码注入方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |