CN106293878B - 一种在jvm中动态计算对象重用价值的方法 - Google Patents

一种在jvm中动态计算对象重用价值的方法 Download PDF

Info

Publication number
CN106293878B
CN106293878B CN201610638600.XA CN201610638600A CN106293878B CN 106293878 B CN106293878 B CN 106293878B CN 201610638600 A CN201610638600 A CN 201610638600A CN 106293878 B CN106293878 B CN 106293878B
Authority
CN
China
Prior art keywords
value
jvm
sstruct
class
pointer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610638600.XA
Other languages
English (en)
Other versions
CN106293878A (zh
Inventor
王斐
史晓华
李超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN201610638600.XA priority Critical patent/CN106293878B/zh
Publication of CN106293878A publication Critical patent/CN106293878A/zh
Application granted granted Critical
Publication of CN106293878B publication Critical patent/CN106293878B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明是一种在JVM中动态计算对象重用价值的方法,用于Java虚拟机中。本发明在程序开始运行时,JVM在内存中为程序新建一块存放统计数据的区域Sspace;修改JVM的类加载器,在加载一个类的时候,在方法区为该类的类信息新增指针P,为该类在Sspace中分配一个统计数据结构Sstruct,指针P指向该类对应的数据结构Sstruct;数据结构Sstruct用于统计类对象的重用价值、上次GC执行前后该类对象存活的个数、本次GC前该类对象的存活个数等。采用本发明方法,可分析出在程序运行过程中可重用的价值较高的对象,从而可反复利用这种对象的内存,减少因为垃圾回收所带来的性能损失,减少出现卡顿的几率。

Description

一种在JVM中动态计算对象重用价值的方法
技术领域
本发明属于计算机应用技术领域,具体地说,是指一种在JVM(Java虚拟机)中动态计算对象重用价值的方法。
背景技术
Android应用程序常常会在使用中出现一些卡顿的情况。Android应用程序大部分都是使用Java语言编写的,在程序正确编写的情况下,这种卡顿很多都是由JVM引起的。在程序正常运行的时候,如果大量对象分配后快速死亡接着重新分配或者大量对象长期不使用占用内存,容易引起虚拟机对内存垃圾进行收集(Garbage Collection)。内存垃圾收集器对内存对象进行回收是一种机械式的管理并且是一种耗时的工作,就会对当前程序的运行造成影响,出现卡顿的情况。如果能重用一些死亡的对象,减少垃圾回收的时间,就有可能减少出现卡顿的几率。
发明内容
本发明针对上述问题,提出一种在程序运行中确定应用程序中对象重用价值的方法,下次有用户安装相同应用程序时,在程序编译时可以使用统计的结果对相应对象的分配进行优化,同时统计的结果也可以反馈给开发人员用以改进相应程序。
本发明提供的一种在Java虚拟机中动态计算对象重用价值的方法,实现方案是:
(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:
然后,将v增加到对应的V上。
本发明的优点与积极效果在于:采用本发明方法,可分析出在程序运行过程中可重用的价值较高的对象,从而可反复利用这种对象的内存,减少因为垃圾回收所带来的性能损失,减少出现卡顿的几率。
附图说明
图1是本发明在JVM中动态计算对象重用价值方法中记录并处理数据的流程图;
图2是本发明实现在JVM中动态计算对象重用价值时修改和新增的数据结构示意图;
图3是本发明方法在新增对象时的处理方法示意图;
图4是一次GC发生时对象个数增减的示意图;
图5是垃圾回收的示意图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的详细说明。
本发明的技术方案可以在内存管理芯片硬件内部实现,也可以遵照所述实现方案,完全或部分由软件实现。本发明通过对Java虚拟机的修改,在Java程序运行时,修改过后的Java虚拟机会记录下来该Java程序运行的信息。
本发明的在Java虚拟机中动态计算对象重用价值的方法,整体流程如图1所示。首先,在程序开始运行时,JVM在内存中将为程序新建一块存放统计数据的区域Sspace,如图2所示。当内存垃圾收集器开始工作后,它将按照图1所示流程,在内存中新建的Sspace中记录在每次GC(Garbage Collection,内存垃圾回收)前后,各个对象的个数。然后根据统计的数据,计算每次GC时每类对象的重用价值,累加得到最后的结果。
图1中给出的方法,在Java虚拟机加载新的类或者内存垃圾收集器中发生“新增对象”、“开始GC”、“标记到存活对象”、“结束GC”等事件时均可被反复触发。
图1中,“开始”表示本发明在虚拟机中开始工作。
第一步,判断JVM“是否加载新类”,如果“是”,则在Sspace中为其分配一个对应的Sstruct,并将对应的Sstruct初始化,如图2所示,完成后结束本方法对本次触发事件的处理;如果“否”,则继续下一步判断。
第二步,将判断内存垃圾收集器“是否新增对象”,如果“是”,则修改对应的Sstruct中的A值,如图3所示,完成后结束本方法对本次触发事件的处理;如果“否”,则继续下一步判断。
第三步,将判断内存垃圾收集器“是否GC”,如果“是”,则计算所有Sstruct上次GC后每个对象的重用价值v,将值累加至V上,然后清零O值,完成后结束本方法对本次触发事件的处理;如果“否”,则继续下一步判断。
对于某类对象,v的计算公式如下:
其中,atan为反正切函数。
第四步,将判断内存垃圾收集器“是否标记到存活对象”,如果“是”,则修改对应的Sstruct中的O值,如图5所示,完成后结束本方法对本次触发事件的处理;如果“否”,则继续下一步判断。
第五步,将判断内存垃圾收集器“是否结束GC”,如果“是”,则对所有的Sstruct进行清理,在每个Sstruct中,将A值赋给B,O值赋给A,完成后结束本方法对本次触发事件的处理;如果“否”,则继续下一步判断。
“结束”表示结束本方法对本次触发事件的处理。
图2展示的是本地修改的数据结构和新增的数据结构。在程序运行时,在内存中开辟一个空间Sspace用于存放程序需要统计的信息。在Sspace中,对每个Java类都利用一个数据结构Sstruct存储统计信息。
需要修改JVM的类加载器ClassLoader,在加载一个类的时候,在方法区为每个类的类信息新增一个指针P,为该类在Sspace中分配如图2所示的额外数据结构Sstruct,将P指向该类对象运行时统计的数据结构Sstruct。在Sstruct初始化时,将V、B、O、A均置为0,将R指向类信息在方法区的地址。
在一个类的Sstruct数据结构中,V存储的是该类对象的重用价值,O代表的是执行完上次GC之后该类对象存活的个数,B代表的上次GC前该类对象的个数,A代表的是在本次GC前该类对象的个数。指针R指向该类在方法区的类信息。
图3展示了新分配一个对象时需要处理的部分。当Java虚拟机执行到一个NEW指令时,通过该对象的类型,取到该类的统计数据的结构体Sstruct的地址,将结构体Sstruct中的数据A加一即可,说明在下次GC发生之前,该类对象的个数增加了一个。
图4展示的是本地程序统计分析可重用对象价值的基本分析方法。程序运行时经过GC后,被垃圾回收收集的对象,如果在下次GC之前相同类型的对象又需要申请分配内存,那么这种对象的内存就可以被反复的利用。减少因为垃圾回收所带来的性能损失。
例如,在一次执行GC前,类D的存活对象有n个,类D的存活对象简称为对象D,执行完GC后对象D还剩a个,到下次执行GC前对象D又变为x个。对于一个类而言,如果对象的个数越多,那么该类对象的可重用价值就越高。并且,如果n比a大并且小于等于x时,该对象D进行重用会取得较好的效果。因此计算一个对象在一次GC时的重用价值时,可以采取如下的公式:
因此,在每次开始GC时,可以计算上次GC发生时的各个类型对象重用价值并将该值加至对应的V值上面。
图4中的对象E是类E的存活对象,对象F是类F的存活对象,同理,可计算在本次GC时每类对象的重用价值,对象E和对象F的重用价值分别为:
将得到的value(E)、value(F)加至对应的V值上面。
图5展示的是垃圾回收时的示意图。在进行垃圾回收时,先清零Sspace中所有Sstruct中的O值,然后每次标记到存活对象时,就将该对象对应的数据结构Sstruct中的O值加一即可。
当本次垃圾回收结束之后,每类对象的O值表示了现在存活的对象的个数。须将Sstruct中A值赋给B,表示上次GC之后的个数是本次GC之前的个数。再将O值赋给A,代表本次GC之后的对象个数为O,等待有NEW指令时再增加A值。
在程序运行结束后,将Sspace中的数据导出,并根据每个数据的指针R能够导出该数据对应的对象的详细信息。这时,调用排序算法,即可分析出在程序运行过程中可重用的价值较高的对象。

Claims (5)

1.一种在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,
然后,将v增加到对应的V上,并清零O值。
2.根据权利要求1所述的一种在JVM中动态计算对象重用价值的方法,其特征在于,所述的JVM中,在内存垃圾收集器中发生新增对象事件时,修改对应的Sstruct中的A值,使A加1。
3.根据权利要求1所述的一种在JVM中动态计算对象重用价值的方法,其特征在于,所述的JVM中,在内存垃圾收集器中发生标记到存活对象事件时,修改对应的Sstruct中的O值,使O加1。
4.根据权利要求1所述的一种在JVM中动态计算对象重用价值的方法,其特征在于,所述的JVM中,在内存垃圾收集器中结束GC事件时,对所有的Sstruct进行清理,在每个Sstruct中,将A值赋给B,O值赋给A。
5.根据权利要求1所述的一种在JVM中动态计算对象重用价值的方法,其特征在于,所述的在JVM中动态计算对象重用价值的方法,在程序运行结束后,将Sspace中的数据导出,并根据每个数据结构Sstruct的指针R导出该类对象的统计信息。
CN201610638600.XA 2016-08-05 2016-08-05 一种在jvm中动态计算对象重用价值的方法 Active CN106293878B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610638600.XA CN106293878B (zh) 2016-08-05 2016-08-05 一种在jvm中动态计算对象重用价值的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610638600.XA CN106293878B (zh) 2016-08-05 2016-08-05 一种在jvm中动态计算对象重用价值的方法

Publications (2)

Publication Number Publication Date
CN106293878A CN106293878A (zh) 2017-01-04
CN106293878B true CN106293878B (zh) 2019-08-27

Family

ID=57665680

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610638600.XA Active CN106293878B (zh) 2016-08-05 2016-08-05 一种在jvm中动态计算对象重用价值的方法

Country Status (1)

Country Link
CN (1) CN106293878B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110020314B (zh) * 2017-12-21 2023-09-29 阿里巴巴(中国)有限公司 Web页面数据处理方法、装置、计算设备和存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101169759A (zh) * 2007-11-08 2008-04-30 Ut斯达康通讯有限公司 应用程序级的内存管理方法
CN101221535A (zh) * 2008-01-25 2008-07-16 中兴通讯股份有限公司 Java虚拟机的垃圾回收移动通信终端及回收方法
CN102023891A (zh) * 2010-12-20 2011-04-20 复旦大学 基于Java虚拟机的并发垃圾收集器框架
CN102722447A (zh) * 2012-06-06 2012-10-10 北京航空航天大学 一种内存垃圾收集器中对象状态的增量式跟踪记录方法
CN102880490A (zh) * 2012-09-19 2013-01-16 南京大学 一种基于Java虚拟机的延时动态对象更新方法
CN104731634A (zh) * 2013-12-24 2015-06-24 珠海世纪鼎利通信科技股份有限公司 一种实时在线的分布式计算框架的实现方法
CN105260174A (zh) * 2015-09-16 2016-01-20 北京航空航天大学 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7203756B2 (en) * 2001-04-27 2007-04-10 International Business Machines Corporation Mechanism to cache references to Java RMI remote objects implementing the unreferenced interface

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101169759A (zh) * 2007-11-08 2008-04-30 Ut斯达康通讯有限公司 应用程序级的内存管理方法
CN101221535A (zh) * 2008-01-25 2008-07-16 中兴通讯股份有限公司 Java虚拟机的垃圾回收移动通信终端及回收方法
CN102023891A (zh) * 2010-12-20 2011-04-20 复旦大学 基于Java虚拟机的并发垃圾收集器框架
CN102722447A (zh) * 2012-06-06 2012-10-10 北京航空航天大学 一种内存垃圾收集器中对象状态的增量式跟踪记录方法
CN102880490A (zh) * 2012-09-19 2013-01-16 南京大学 一种基于Java虚拟机的延时动态对象更新方法
CN104731634A (zh) * 2013-12-24 2015-06-24 珠海世纪鼎利通信科技股份有限公司 一种实时在线的分布式计算框架的实现方法
CN105260174A (zh) * 2015-09-16 2016-01-20 北京航空航天大学 实时Java虚拟机中基于等价类的对象内存状态的记录跟踪方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JVM虚拟机的垃圾收集机制;刘世俊 等;《科技信息》;20081103(第21期);第404-405页 *
一种改进的增量式JVM垃圾收集算法;张嗜军 等;《计算机工程》;20120427;第38卷(第1期);第71-73页 *

Also Published As

Publication number Publication date
CN106293878A (zh) 2017-01-04

Similar Documents

Publication Publication Date Title
KR101600129B1 (ko) 애플리케이션 효율 엔진
Flood et al. Shenandoah: An open-source concurrent compacting garbage collector for openjdk
Shacham et al. Chameleon: Adaptive selection of collections
US7069279B1 (en) Timely finalization of system resources
US8504594B2 (en) Memory management method, and memory management apparatus
US9189393B2 (en) Computer, control method of computer, and recording medium
CN110325969A (zh) 多阶段垃圾收集器
Lucchese et al. Parallel mining of frequent closed patterns: Harnessing modern computer architectures
CN106293878B (zh) 一种在jvm中动态计算对象重用价值的方法
US20140019569A1 (en) Method to determine patterns represented in closed sequences
US20030196061A1 (en) System and method for secure execution of multiple applications using a single GC heap
US20130066928A1 (en) Caching socket connections while ensuring that there are file descriptors available for the applications
CN102270134B (zh) 一种Java卡中垃圾回收的方法及装置
Peiris et al. Automatically detecting" excessive dynamic memory allocations" software performance anti-pattern
CN103699435A (zh) 负载均衡方法及装置
US20120221821A1 (en) Method of managing memory in computer system, computer system and memory managing program
CN108628678B (zh) 内存参数的确定方法、装置及设备
US9460002B1 (en) Memory allocation
Xian et al. Garbage collection: Java application servers’ Achilles heel
Mohamedin et al. ByteSTM: Virtual machine-level Java software transactional memory
US20080034022A1 (en) System and method for updating references when incrementally compacting a heap
Papaspyrou et al. On preserving term sharing in the Erlang virtual machine
US8239865B2 (en) Waiting and synchronization of parallel task executions based on task groups and task object representations
Belov et al. Parallel MUS extraction
Bożejko et al. Parallel calculating of the goal function in metaheuristics using GPU

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant