主权项 |
一种在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>×</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>×</mo><mfrac><mn>2</mn><mi>π</mi></mfrac></mrow>]]></math><img file="FDA0001070859230000011.GIF" wi="517" he="92" /></maths>然后,将v增加到对应的V上,并清零O值。 |