1.一種在JVM中動態(tài)計算對象重用價值的方法,其特征在于,通過下面過程實現:
(1)在程序開始運行時,JVM在內存中為程序新建一塊存放統計數據的區(qū)域Sspace;
(2)修改JVM的類加載器ClassLoader,在加載一個新類的時候,在方法區(qū)為該類的類信息新增一個指針P,為該類在Sspace中分配一個數據結構Sstruct,指針P指向該類對象運行時統計的數據結構Sstruct;
(3)為一個類分配的數據結構Sstruct中,包含四個參數和一個指針;四個參數為:該類對象的重用價值V,執(zhí)行完上次GC之后該類對象存活的個數O,上次GC前該類對象的個數B,在本次GC前該類對象的個數A;指針R指向該類在方法區(qū)的類信息;在Sstruct初始化時,將V、B、O、A均置為0,將R指向類信息在方法區(qū)的地址;GC代表內存垃圾回收;
在內存垃圾收集器中開始GC事件時,對每個類對象,根據下式計算重用價值v,
然后,將v增加到對應的V上,并清零O值。
2.根據權利要求1所述的一種在JVM中動態(tài)計算對象重用價值的方法,其特征在于,所述的JVM中,在內存垃圾收集器中發(fā)生新增對象事件時,修改對應的Sstruct中的A值,使A加1。
3.根據權利要求1所述的一種在JVM中動態(tài)計算對象重用價值的方法,其特征在于,所述的JVM中,在內存垃圾收集器中發(fā)生標記到存活對象事件時,修改對應的Sstruct中的O值,使O加1。
4.根據權利要求1所述的一種在JVM中動態(tài)計算對象重用價值的方法,其特征在于,所述的JVM中,在內存垃圾收集器中結束GC事件時,對所有的Sstruct進行清理,在每個Sstruct中,將A值賦給B,O值賦給A。
5.根據權利要求1所述的一種在JVM中動態(tài)計算對象重用價值的方法,其特征在于,所述的在JVM中動態(tài)計算對象重用價值的方法,在程序運行結束后,將Sspace中的數據導出,并根據每個數據結構Sstruct的指針R導出該類對象的統計信息。