发明名称 一种在JVM中动态计算对象重用价值的方法
摘要 本发明是一种在JVM中动态计算对象重用价值的方法,用于Java虚拟机中。本发明在程序开始运行时,JVM在内存中为程序新建一块存放统计数据的区域Sspace;修改JVM的类加载器,在加载一个类的时候,在方法区为该类的类信息新增指针P,为该类在Sspace中分配一个统计数据结构Sstruct,指针P指向该类对应的数据结构Sstruct;数据结构Sstruct用于统计类对象的重用价值、上次GC执行前后该类对象存活的个数、本次GC前该类对象的存活个数等。采用本发明方法,可分析出在程序运行过程中可重用的价值较高的对象,从而可反复利用这种对象的内存,减少因为垃圾回收所带来的性能损失,减少出现卡顿的几率。
申请公布号 CN106293878A 申请公布日期 2017.01.04
申请号 CN201610638600.X 申请日期 2016.08.05
申请人 北京航空航天大学 发明人 王斐;史晓华;李超
分类号 G06F9/455(2006.01)I 主分类号 G06F9/455(2006.01)I
代理机构 北京永创新实专利事务所 11121 代理人 祗志洁
主权项 一种在JVM中动态计算对象重用价值的方法,其特征在于,通过下面过程实现:(1)在程序开始运行时,JVM在内存中为程序新建一块存放统计数据的区域Sspace;(2)修改JVM的类加载器ClassLoader,在加载一个新类的时候,在方法区为该类的类信息新增一个指针P,为该类在Sspace中分配一个数据结构Sstruct,指针P指向该类对象运行时统计的数据结构Sstruct;(3)为一个类分配的数据结构Sstruct中,包含四个参数和一个指针;四个参数为:该类对象的重用价值V,执行完上次GC之后该类对象存活的个数O,上次GC前该类对象的个数B,在本次GC前该类对象的个数A;指针R指向该类在方法区的类信息;在Sstruct初始化时,将V、B、O、A均置为0,将R指向类信息在方法区的地址;GC代表内存垃圾回收;在内存垃圾收集器中开始GC事件时,对每个类对象,根据下式计算重用价值v,<maths num="0001"><math><![CDATA[<mrow><mi>v</mi><mo>=</mo><mfrac><mrow><mi>B</mi><mo>+</mo><mi>O</mi><mo>+</mo><mi>A</mi></mrow><mn>3</mn></mfrac><mo>&times;</mo><mfrac><mrow><mi>a</mi><mi>t</mi><mi>a</mi><mi>n</mi><mrow><mo>(</mo><mi>A</mi><mo>-</mo><mi>O</mi><mo>)</mo></mrow></mrow><mrow><mi>B</mi><mo>-</mo><mi>O</mi></mrow></mfrac><mo>&times;</mo><mfrac><mn>2</mn><mi>&pi;</mi></mfrac></mrow>]]></math><img file="FDA0001070859230000011.GIF" wi="517" he="92" /></maths>然后,将v增加到对应的V上,并清零O值。
地址 100191 北京市海淀区学院路37号