首页> 中国专利> 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法

实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法

摘要

本发明是一种实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法。本发明方法对Java虚拟机上运行的每个方法,将方法中的所有等价类都记录在一个等价类链表中,方法内每一个对象都将包含在某一等价类中,表示内存信息的内存对象也包含在等价类中;链表中每个等价类的结构包括等价类ID、内存等价类Tag、对象集合、对象成员变量和等价类内存状态,内存等价类Tag标识等价类是否为内存信息等价类,等价类内存状态存储等价类所在的内存区域;利用等价类链表进行对象内存状态跟踪。本发明可以对程序中所有对象的所有可能的内存状态进行记录,为实时虚拟机的后续优化工作做准备,比如对象引用检查的消除等,从而提高了实时性能。

著录项

  • 公开/公告号CN105260174A

    专利类型发明专利

  • 公开/公告日2016-01-20

    原文格式PDF

  • 申请/专利权人 北京航空航天大学;

    申请/专利号CN201510591571.1

  • 发明设计人 冯伟;史晓华;余恒洋;

    申请日2015-09-16

  • 分类号G06F9/44(20060101);G06F11/36(20060101);

  • 代理机构11121 北京永创新实专利事务所;

  • 代理人祗志洁

  • 地址 100191 北京市海淀区学院路37号

  • 入库时间 2023-12-18 13:47:49

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-09-28

    授权

    授权

  • 2016-02-17

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20150916

    实质审查的生效

  • 2016-01-20

    公开

    公开

说明书

技术领域

本发明属于Java计算机应用技术领域,具体是一种实时Java虚拟机中基于等价类的对象 内存状态的记录跟踪方法。

背景技术

在Java实时规范(RealTimeSpecificationforJava,RTSJ)中,为避免内存垃圾收集器 (GarbageCollector,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虚拟机后续有关内存优化工作 做充分准备。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号