[发明专利]一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法无效
申请号: | 200910077251.9 | 申请日: | 2009-01-20 |
公开(公告)号: | CN101493767A | 公开(公告)日: | 2009-07-29 |
发明(设计)人: | 张昱;袁丽娜 | 申请(专利权)人: | 中国科学技术大学 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F12/02 |
代理公司: | 北京凯特来知识产权代理有限公司 | 代理人: | 郑立明 |
地址: | 230026*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 即时 编译器 辅助 垃圾 收集 中显式 释放 对象 方法 | ||
1.一种即时编译器辅助的垃圾收集中显式释放对象的插桩方法,其特征在于,包括:
将经过对象生命期分析后获得的死亡对象信息中满足插桩类型条件的信息,记录到插桩信息中;所述插桩信息包含为死亡对象选择的引用及确定的插桩位置;
根据所述插桩信息,创建对应的显式内存释放指令,将所述显式内存释放指令安插到对应的位置上,以对所述死亡对象的内存空间进行释放;
所述死亡对象包括:直接死亡对象和与所述直接死亡对象有域引用关系的间接死亡对象;所述死亡对象信息包括:直接死亡对象及对应的死亡位置和所述直接死亡对象的域信息,以及与所述直接死亡对象有域引用关系的间接死亡对象及对应的死亡位置;
将所述显式内存释放指令安插到对应的位置上的具体过程包括:
判断所述插桩信息中所述直接死亡对象或与所述直接死亡对象有域引用关系的所述间接死亡对象的插桩位置是否为分支跳转指令,当为分支跳转指令时,将所述显式内存释放指令安插在所述分支跳转指令的每个跳转目标的入口处;
否则,进一步判断所述直接死亡对象或所述间接死亡对象确定的插桩位置,当所述插桩位置为返回语句所在的结点时,则在所述插桩位置的最后一条指令之前安插所述显式内存释放指令;否则,在所述插桩位置的指令的最后一条指令之后安插所述显式内存释放指令。
2.根据权利要求1所述的方法,其特征在于,将经过对象生命期分析后获得的死亡对象信息中满足插桩类型条件的信息,记录到插桩信息中的具体过程包括:
为所述直接死亡对象选择引用及确定插桩位置;
对于与所述直接死亡对象有域引用关系的所述间接死亡对象,根据为所述直接死亡对象选择的引用、所述域信息和域引用关系,确定所述间接死亡对象的引用及其插桩位置;
将所述直接死亡对象的引用及插桩位置以及所述间接死亡对象的引用及插桩位置,根据所述插桩类型条件进行判断,记录满足所述条件的引用及插桩位置,以获得所述插桩信息。
3.根据权利要求1或2所述的方法,其特征在于,所述插桩类型条件包括:在程序执行的控制流上,为所述死亡对象选择的引用所在的结点要支配所述死亡对象的插桩位置所在的结点。
4.根据权利要求2所述的方法,其特征在于,为所述直接死亡对象选择的引用包括:对象分配点处的引用和由phi语句、赋值语句或域赋值语句带来的引用中的至少一种;
当为所述直接死亡对象选择引用时,所述对象分配点处的引用的优先级大于所述由phi语句、赋值语句或域赋值语句带来的引用的优先级。
5.根据权利要求4所述的方法,其特征在于,根据所述插桩信息,创建相应的显式内存释放指令的具体过程包括:
对所述插桩信息中为所述死亡对象选择的引用进行判断;
当所述直接死亡对象的引用是所述对象分配点处的引用或是由phi语句或赋值语句带来的引用时,直接根据所述直接死亡对象的引用创建相应的显式内存释放指令,以对所述直接死亡对象的内存空间进行释放;或者,
当所述直接死亡对象的引用为所述域赋值语句带来的引用,则首先创建取域地址指令来获得存放所述直接死亡对象的引用的域的地址,然后根据所述域的地址新建加载指令来获得所述直接死亡对象的位置信息,最后根据所述位置信息创建显式内存释放指令,以对所述直接死亡对象的内存空间进行释放。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
对于所述间接死亡对象的引用,首先创建取域地址指令来获得存放所述间接死亡对象的引用的域的地址,然后根据所述域的地址新建加载指令来获得所述间接死亡对象的位置信息,最后根据所述位置信息创建显式内存释放指令,以对与所述直接死亡对象有域引用关系的所述间接死亡对象的内存空间进行释放。
7.根据权利要求1所述的方法,其特征在于,所述死亡对象插桩位置包括:Java程序中方法的返回语句所在的结点和经过对象生命期分析后获得的对象死亡的位置中的至少一种;
当为所述死亡对象确定插桩位置时,所述返回语句所在的结点的优先级大于所述经过对象生命期分析后获得的对象死亡的位置的优先级。
8.一种即时编译器辅助的垃圾收集中显式释放对象的插桩装置,其特征在于,所述装置包括:
插桩信息收集模块,用于将经过对象生命期分析后获得的死亡对象信息中满足插桩类型条件的信息,记录到插桩信息中;所述插桩信息包含为死亡对象选择的引用及确定的插桩位置;所述死亡对象包括:直接死亡对象和与所述直接死亡对象有域引用关系的间接死亡对象;所述死亡对象信息包括:直接死亡对象及对应的死亡位置和所述直接死亡对象的域信息,以及与所述直接死亡对象有域引用关系的间接死亡对象及对应的死亡位置;
插桩信息执行模块,用于根据所述插桩信息,创建对应的显式内存释放指令,将所述显式内存释放指令安插到对应的位置上,以对所述死亡对象的内存空间进行释放;所述插桩信息执行模块将所述显式内存释放指令安插到对应的位置上的具体过程包括:
判断所述插桩信息中所述直接死亡对象或与所述直接死亡对象有域引用关系的所述间接死亡对象的插桩位置是否为分支跳转指令,当为分支跳转指令时,将所述显式内存释放指令安插在所述分支跳转指令的每个跳转目标的入口处;
否则,进一步判断所述直接死亡对象或所述间接死亡对象确定的插桩位置,当所述插桩位置为返回语句所在的结点时,则在所述插桩位置的最后一条指令之前安插所述显式内存释放指令;否则,在所述插桩位置的指令的最后一条指令之后安插所述显式内存释放指令。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学技术大学,未经中国科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910077251.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:光学膜及该光学膜的制造方法
- 下一篇:一种西洋参山核桃的加工方法