CN110543357A - 管理应用程序对象的方法,相关装置及*** - Google Patents

管理应用程序对象的方法,相关装置及*** Download PDF

Info

Publication number
CN110543357A
CN110543357A CN201810519626.1A CN201810519626A CN110543357A CN 110543357 A CN110543357 A CN 110543357A CN 201810519626 A CN201810519626 A CN 201810519626A CN 110543357 A CN110543357 A CN 110543357A
Authority
CN
China
Prior art keywords
new generation
storage
storage area
area
turn
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.)
Granted
Application number
CN201810519626.1A
Other languages
English (en)
Other versions
CN110543357B (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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201810519626.1A priority Critical patent/CN110543357B/zh
Publication of CN110543357A publication Critical patent/CN110543357A/zh
Application granted granted Critical
Publication of CN110543357B publication Critical patent/CN110543357B/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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Memory System (AREA)

Abstract

本申请提供了管理应用程序对象的方法,相关装置及***,该方法可应用于虚拟机,虚拟机的内存空间包括第一存储区域,第一存储区域用于存储存活轮次小于预设轮次的对象,该方法包括:在第一存储区域创建应用程序的第一对象;在第一存储区域中根据第一对象构造第二对象,作为第一对象的“替代物”,第二对象占用的存储空间小于第一对象占用的存储空间,即第二对象比第一对象要简单;将第一存储区域中的第一对象存储到第一存储区域之外的存储区域。该方法能够减少老年代区域中对象的堆叠及Full GC的问题,提升应用程序性能。

Description

管理应用程序对象的方法,相关装置及***
技术领域
本发明涉及计算机信息存储技术领域,尤其涉及管理应用程序对象的方法,相关装置及***。
背景技术
内存的占用和释放问题一直是大型的应用开发中需要重点关注的问题,目前通常采用内垃圾回收(Garbage Collection,GC)的方法来优化内存占用,提高***/应用的运行性能。GC是一种自动的内存管理机制,主要目的是发现内存中无用的对象以及回收被其占用的内存空间。
以Java虚拟机(Java Virtual Machine,JVM)为例,在内存中规划出一个称为“堆”的内存空间来存放Java应用程序的对象(Java对象)。堆又被划分为新生代区域和老年代区域,新生代区域用来存放生命周期比较短的对象,老年代区域用于存放生命周期比较长的对象。其中,针对于新生代区域的垃圾回收称为少数垃圾回收(Minor GC),针对于老年代区域的垃圾回收称为完全垃圾回收(Full GC)。
Minor GC采用的是复制算法来实现新生代区域中的垃圾回收。新生代区域几乎是所有对象被创建时所在的地方,即对象申请存放的内存空间在新生代区域,大部分对象通常不需长久存活。虚拟机在新生代区域已占用的内存空间达到一定空间阈值后,对新生代区域进行了Minor GC,回收掉了不活跃的对象占用的空间。对于一些长期活跃(生命周期较长)的对象,每在新生代区域熬过一轮Minor GC,就将该对象的年龄加1,当该对象的年龄达到预设阈值时,就会将这些对象搬移到老年代区域。
Full GC通常采用的是标记-清除算法来实现老年代区域中的垃圾回收。老年代区域分配的内存空间一般都要比新生代区域多很多,也正因其相对较大的内存空间,老年代区域发生Full GC的次数不会有新生代区域Minor GC那么频繁,并且老年代区域进行一次Full GC要比新生代区域进行一次Minor GC的时间更长(甚至达10倍以上)。如果老年代区域中这些对象被长时间引用,就会在老年代区域中发生堆叠,堆叠过多导致老年代区域的可用空间不足时,就会触发整个虚拟机堆内存上的Full GC,此时将会停止虚拟机进程中的所有线程,即此时虚拟机应用程序将暂停一切工作活动,Full GC过程给应用程序带来极大的性能下降问题。
发明内容
本发明实施例提供管理应用程序对象的方法,相关装置及***,能够极大减少甚至避免老年代区域中对象的堆叠及Full GC的问题,提升应用程序性能。
第一方面,本发明实施例提供了一种管理应用程序对象的方法,该方法应用于虚拟机,虚拟机(例如JVM)是指一种特殊的软件实体,这种软件实体可以在计算机平台和终端用户之间创建一种环境,而终端用户可基于虚拟机所创建的环境来运行应用程序。应用程序在应用过程中会构造存放于新生代区域的对象。所述虚拟机不限于Java环境,还可以适用于其他的托管型语言,如Scala、Groovy等。所述虚拟机的内存空间包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象,所述存活轮次是指所述对象在所述第一存储区域中的年龄,第一存储区域每进行一轮垃圾回收(Garbage Collection,GC)动作,依然存活在第一存储区域的对象的年龄就会增加1,可以理解的,在现有的内存管理机制下,如果对象的存活轮次达到预设轮次(例如预设轮次为15),那么该对象就会被搬移出所述第一存储区域。所述方法包括:在第一存储区域中创建应用程序的第一对象,例如,应用程序在接收到客户的数据之后,会创建***内部的复杂对象(如EventData),所述复杂对象即为所述第一对象。其中,本发明实施例中,假如该对象在业务处理的过程中无法快速释放,且在第一存储区域驻留时间很长,导致其年龄能到达到预设阈值,那么这样的对象可视为复杂对象;在所述第一存储区域中,根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。
可以看到,本发明实施例中,在第一对象(复杂对象)未被搬移出第一存储区域之前,使用一个新的简单对象(第二对象)来在第一存储区域代替该复杂对象,后续在需要再次使用该第一对象时又可以利用第二对象重新还原出关联的第一对象。由于第二对象占用内存小于甚至远小于第一对象占用的内存,一方面极大地延缓了第一存储区域中的内存占用达到空间阈值的速度,也就是极大降低了第一存储区域发生GC的频率;另一方面,相比第一对象而言,由于第二对象的年龄难以达到预设阈值,所以第二对象会较长时间地处在第一存储区域。甚至来说,第二对象可能在其年龄达到预设阈值之前,其生命周期就已经结束(即第二对象变成了不活跃对象),从而在GC中被清除。所以,实施本发明实施例,有利于避免出现第一对象由于内存管理机制而被搬移出第一存储区域(如被搬移到类似于老年代区域的其他区域)的问题,且不影响应用程序正常使用对象,提升应用程序的性能。
基于第一方面,在一具体的实施方式中,所述方法具体应用于JVM虚拟机,所述虚拟机的内存空间包括堆空间,所述堆空间包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于所述预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于所述预设轮次的对象。可以理解的,新生代区域每进行一轮Minor GC,依然存活在新生代区域中的对象的年龄就会增加1,可以理解的,如果对象的存活轮次达到预设轮次,那么该对象就会被从新生代区域搬移到老年代区域。例如,预设轮次是15,那么存活轮次不能达到15次的对象就一直存在于新生代区域直至被清除;对于存活轮次能够达到(超过)15次的对象,说明该对象能熬过15个轮次的Minor GC,即其生命周期(即总生命时长)比新生代区域历经15个轮次的Minor GC的总时间还要长,可以理解的,这样的对象如果在现有技术下,就终究会被存储到老年代区域。该方法具体包括:在新生代区域中,创建应用程序的第一对象;确定是否为所述第一对象构造所述第二对象;若所述确定结果是为所述第一对象构造所述第二对象,则在所述新生代区域中根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的内存空间小于所述第一对象占用的内存空间;将所述第一对象(具体例如经过序列化后的第一对象)存储到所述新生代区域和所述老年代区域之外的存储区域。
也就是说,本实施方式中,在应用程序运行过程中,为了避免复杂对象(即第一对象)被长时间引用而在老年代区域堆叠导致Full GC,而在复杂对象未被搬移到老年代区域之前,使用一个ID对象(即第二对象)来在新生代区域中代替该复杂对象,后续在需要再次使用该复杂对象时又可以利用该ID对象重新还原出关联的复杂对象。由于ID对象占用的内存小于甚至远小于复杂对象占用的内存,所以一方面极大地延缓了新生代区域中的内存占用达到空间阈值的速度,也就是极大降低了新生代区域发生Minor GC的频率,提高了内存的使用效率;另一方面,相比复杂对象而言,ID对象会较长时间地处在新生代区域。甚至来说,大部分ID对象可能在其年龄达到预设阈值之前,其生命周期就已经结束,从而在MinorGC中被清除。所以,实施本发明实施例,有利于避免复杂对象进入老年代区域,提升了应用程序的性能。
基于第一方面的上述实施方式,在可能的实施例中,由于新生代中创建的对象可能是生命周期较短(即存活轮次小于预设轮次)的对象,也有可能是生命周期较长的对象(即存活轮次能够达到预设轮次),而生命周期较短的对象肯定会在新生代区域中消亡而不会进入老年代区域;所以本发明实施例关注的是生命周期较长而导致会进入老年代区域的对象,这样的对象可即为复杂对象。所以,在一个对象创建后,需确定该对象是否是所述复杂对象。
在一可能实施例中,确定所述第一对象的预估存活轮次是否大于或等于所述预设轮次,如果所述第一对象的存活轮次能够达到所述预设轮次,则所述确定结果是为所述第一对象构造所述第二对象。其中,所述预估存活轮次为预先估计的能够达到并超过预设轮次的存活轮次。举例来说,预设轮次为15,可以预先根据历史经验判断某个对象是复杂对象,例如预估该对象在新生代区域的存活轮次能够达到15,其生命周期能够比15个轮次的Minor GC的总时间还要长,那么这样的第一对象即为预估的复杂对象。
在一可能实施例中,确定特定对象类型的类的存活轮次是否大于或等于所述预设轮次;如果所述特定对象类型的类的存活轮次能够达到所述预设轮次,并且所述第一对象的对象类型属于所述特定对象类型,则所述确定结果是为所述第一对象构造所述第二对象,其中,类为具有相同属性和共同行为的一组特定对象类型的集合,可以理解的,如果某个类(例如某种数组)是复杂对象的集合,那么如果第一对象属于这个类,那么第一对象就是一种复杂对象。对于这样的第一对象,确定结果是为所述第一对象构造所述第二对象。
基于第一方面的上述实施方式,在可能的实施例中,所述将所述新生代区域中的所述第一对象存储到所述新生代区域和所述老年代区域以外的存储区域之前,包括:对所述第一对象进行序列化处理,得到序列化后的第一对象。所谓序列化为将复杂对象的状态信息转换为可以存储或传输的字节序列的过程,所述序列化后的对象即为所述字节序列;
相应的,所述将所述新生代区域中的所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域,包括:将所述序列化后的第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。采用序列化处理能够有利于第一对象的传输和存储,并且后续需要使用到第一对象时,相应地对对序列化后的对象进行反序列化,即可恢复出原有的第一对象。其中,所谓反序列化即为将字节序列恢复为对象的过程。
基于第一方面的上述实施方式,在具体的实施例中,所构造的第二对象(简单对象)包含第一对象(复杂对象)的标识(例如唯一标识UID),所以又可将这个简单对象称为ID对象。具体的,这个标识可以是在调用ID对象构造模块时作为参数和复杂对象一起传入的,或者,这个标识可以是携带于复杂对象中而被ID对象构造模块提取得到的,或者,这个标识还可以是ID对象构造模块根据复杂对象而生成的。
在可能的实施例中,所述ID对象还会包括位置信息,所述位置信息指示了序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置,以便于后续通过所述ID对象来实现还原出对应的复杂对象。
在一种应用场景中,第二对象同时包含了第一对象的标识以及位置信息,那么,当应用程序需要当需要调用所述第一对象时,实现调用第一对象的过程描述如下:接收应用程序对第一对象的调用请求,该请求包括所述第一对象的标识;在所述新生代区域中,根据所述第一对象的标识查找到所述第二对象。通过所述第二对象获得位置信息,根据所述存储位置查找位于所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象;将所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象存入至所述新生代区域;对所述序列化后的第一对象进行反序列化处理,从而得到调用所需的第一对象。
在又一种应用场景中,如果序列化后的第一对象在所述新生代区域和老年代区域之外的存储区域中的存储位置与该第一对象具有映射关系,那么,也可以将位置信息作为该第一对象的标识。在这种情况下,第二对象只需至少包含位置信息。那么,当应用程序需要当需要调用所述第一对象时,实现调用第一对象的过程描述如下:接收应用程序对第一对象的调用请求,该请求包括所述第一对象的标识;通过所述第二对象获得位置信息(即第一对象的标识),所述位置信息指示了所述序列化后的第一对象在所述新生代区域和所述老年代区域之外的存储区域中的存储位置,根据所述存储位置查找位于所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象;将所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象存入至所述新生代区域;对所述序列化后的第一对象进行反序列化处理,从而得到调用所需的第一对象。
可以看到,本发明实施例在避免复杂对象进入老年代区域,从而避免了复杂对象被长时间引用而在老年代区域堆叠导致Full GC的问题的前提下,还能够不影响应用程序正常使用对象,在业务处理中保持业务连续性和稳定性,提升了应用程序的性能。
基于第一方面的上述实施方式,在可能的实施例中,如果序列化过程有多种可选的序列化算法(可以理解的,反序列化算法与序列化算法相对应),那么就还需要记录复杂对象对应的序列化算法,比如可以将ID对象和对应的复杂对象所使用的序列化算法之间的映射关系记录在ID对象中,或者,还可以单独存储ID对象和对应的复杂对象所使用的序列化算法之间的映射关系。
基于第一方面的上述实施方式,在可能的实施例中,如果数据中转模块有多种可选的保存方式(比如包括保存在本地的存储器和保存到云端服务器等等),那么就还需要记录序列化后的对象的保存方式,比如可以将ID对象和对应的序列化后的对象的保存方式之间的映射关系记录在ID对象中,或者单独存储ID对象和对应的序列化后的对象的保存方式之间的映射关系。
第二方面,本发明实施例提供了一种管理应用程序对象的装置,所述装置包括存储模块(或称存储器,如内存)、业务模块(或称业务***)和管理模块;其中:所述存储模块包括堆空间,所述堆空间包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象;所述业务模块用于,在所述第一存储区域中创建应用程序的第一对象;所述管理模块用于,根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象存储于在所述第一存储区域中,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。所述装置的各个功能模块具体用于实现第一方面所描述的方法。
其中,在一种可能的应用场景中,管理模块可能部署在所针对的堆空间中。例如针对一虚拟机的内存空间中的堆空间,堆空间包括新生代区域和老年代区域,管理模块初始被创建时存储于所述新生代区域,随着时间的推移,由于管理模块需持续进行工作,所以管理模块终会随着时间的增加而被从新生代区域搬移到老年代区域,这样,从较长时间的角度来看,管理模块将持续稳定部署于老年代区域。
在一种可能的应用场景中,管理模块可能部署在第一存储区域外的内存区域,且管理模块与堆空间位于同一内存空间。例如针对一虚拟机的内存空间中的堆空间,堆空间包括新生代区域和老年代区域,那么管理模块可能部署在所针对的堆空间的新生代区域和老年代区域外,且管理模块与堆空间位于同一内存空间。
在一种可能的应用场景中,管理模块可能部署的内存空间不同于其所针对的堆空间的内存空间(比如管理模块和堆空间分别部署于集群的不同节点的内存空间)。
第三方面,本发明实施例提供了一种管理应用程序对象的***,所述***包括一个或者多个计算设备,每个计算设备包括处理器和存储器,处理器和存储器可通过总线连接。所述存储器包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象;所述处理器用于,在所述第一存储区域中创建应用程序的第一对象;在所述第一存储区域中根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。所述***具体用于实现第一方面所描述的方法。
第四方面,本发明实施例提供了一种非易失性计算机可读存储介质;所述计算机可读存储介质用于存储第一方面所述方法的实现代码。所述程序代码被计算设备执行时,可用于执行前述第一方面所述方法。
第五方面,本发明实施例提供了一种计算机程序产品;该计算机程序产品包括程序指令,当该计算机程序产品被计算设备执行时,可用于执行前述第一方面所述方法。该计算机程序产品可以为一个软件安装包,在需要使用前述第一方面的任一种可能的设计提供的方法的情况下,可以下载该计算机程序产品并在控制器上执行该计算机程序产品,以实现第一方面所述方法。
可以看到,本发明实施例中,在应用程序运行过程中,为了避免复杂对象(即第一对象)被长时间引用而在老年代区域堆叠导致Full GC,而在复杂对象未被搬移到老年代区域之前,使用一个ID对象(即第二对象)来在新生代区域中代替该复杂对象,后续在需要再次使用该复杂对象时又可以利用该ID对象重新还原出关联的复杂对象。由于ID对象占用的内存小于甚至远小于复杂对象占用的内存,所以一方面极大地延缓了新生代区域中的内存占用达到空间阈值的速度,也就是极大降低了新生代区域发生Minor GC的频率,提高了内存的使用效率;另一方面,相比复杂对象而言,ID对象会较长时间地处在新生代区域。甚至来说,大部分ID对象可能在其年龄达到预设阈值之前,其生命周期就已经结束,从而在Minor GC中被清除。所以,实施本发明实施例,有利于避免复杂对象进入老年代区域,从而极大减缓了老年代区域中的对象数据量的增加,避免了复杂对象被长时间引用而在老年代区域堆叠导致Full GC的问题,且能够不影响应用程序正常使用对象,在业务处理中保持业务连续性,提升了应用程序的性能。
附图说明
为了更清楚地说明本发明实施例或背景技术中的技术方案,下面将对本发明实施例或背景技术中所需要使用的附图进行说明。
图1是现有技术中的一种管理复杂对象的场景示意图;
图2是本发明实施例提供的一种部署管理节点的示意图;
图3是本发明实施例提供的又一种部署管理节点的示意图;
图4是本发明实施例提供的又一种部署管理节点的示意图;
图5是本发明实施例提供的一种管理复杂对象的场景示意图;
图6是本发明实施例提供的调用复杂对象的场景示意图;
图7是本发明实施例提供的一种管理应用程序对象的方法的流程示意图;
图8是本发明实施例提供的又一种管理应用程序对象的方法的流程示意图;
图9是本发明实施例提供的又一种管理应用程序对象的方法的流程示意图;
图10是本发明实施例提供的一种管理应用程序对象的装置的结构示意图;
图11是本发明实施例提供的一种***的结构示意图。
具体实施方式
下面结合本发明实施例中的附图对本发明实施例进行描述。本发明的实施方式部分使用的术语仅用于对本发明的具体实施例进行解释,而非旨在限定本发明。
在计算机领域的体系结构里,虚拟机(例如JVM)是指一种特殊的软件实体,这种软件实体可以在计算机平台和终端用户之间创建一种环境,而终端用户可基于虚拟机所创建的环境来运行应用程序。通常来说,JVM所管理的堆空间主要用于存放各种java应用程序的类的java对象,其中所述类为具有相同属性和共同行为的一组对象的集合,java对象可以理解为类中的具体的实例对象。参见图1,堆空间包括新生代区域和老年代区域,java应用程序在应用过程中会构造存放于新生代区域的对象。假如该java对象在业务处理的过程中无法快速释放,且在新生代区域驻留时间很长,其年龄能到达到预设阈值,那么可将这样的对象称为复杂对象。根据JVM传统的内存管理机制,该复杂对象终会被由新生代区域搬移到老年代区域。
在业界现有的大数据应用中,通常伴随着海量的数据处理,且往往数据处理的时间超过了新生代区域的GC时间,所以会有大量与数据处理相关的复杂对象被转到老年代中,老年代区域中的对象逐渐累计,一旦老年代区域触发Full GC,将会导致停止虚拟机进程中的所有线程,极大影响虚拟机的应用性能。
基于此,为了避免老年代区域的Full GC的问题,提升应用性能,本发明实施例提供了管理模块,管理模块按功能划分可包括三个子模块:ID对象构造模块、序列化模块和数据中转模块,其各自的功能描述如下:
(1)ID对象构造模块:ID对象构造模块可用于根据传入新生代区域的复杂对象构造一个简单对象,这个简单对象占用的内存空间小于复杂对象占用的内存空间,这个简单对象用于替换所述复杂对象。
具体实施例中,所构造的简单对象包含复杂对象的标识(例如唯一标识UID),所以又可将这个简单对象称为ID对象。具体的,这个标识可以是在调用ID对象构造模块时作为参数和复杂对象一起传入的,或者,这个标识可以是携带于复杂对象中而被ID对象构造模块提取得到的,或者,这个标识还可以是ID对象构造模块根据复杂对象而生成的。
在可能的实施例中,所述ID对象还会包括位置信息,所述位置信息指示了序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置,以便于后续通过所述ID对象来实现还原出对应的复杂对象。
(2)序列化模块:序列化模块可以用来将复杂对象进行序列化,得到序列化后的对象。所谓序列化为将复杂对象的状态信息转换为可以存储或传输的字节序列的过程,所述序列化后的对象即为所述字节序列。序列化模块还可以用来接收其他应用程序编程接口(Application Programming Interface,API)请求的反序列化构建内存的复杂对象引用。
序列化模块还可用于对序列化后的对象进行反序列化,从而恢复出原有的对象。所谓反序列化即为将字节序列恢复为对象的过程。
需要说明的是,如果序列化模块有多种可选的序列化算法(可以理解的,反序列化算法与序列化算法相对应),那么就还需要记录复杂对象对应的序列化算法,比如可以将ID对象和对应的复杂对象所使用的序列化算法之间的映射关系记录在ID对象中,或者,还可以单独存储ID对象和对应的复杂对象所使用的序列化算法之间的映射关系。
(3)数据中转模块:数据中转模块可用于将序列化后的对象进行数据中转,从而将序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置,例如可将序列化后的对象保存到本地的其他存储器,或者,可将序列化后的对象保存到内存中除堆空间外的空间,或者,可通过网络将序列化后的对象传输到其他设备,等等。
需要说明的是,如果数据中转模块有多种可选的保存方式(比如包括保存在本地的存储器和保存到云端服务器等等),那么就还需要记录序列化后的对象的保存方式,比如可以将ID对象和对应的序列化后的对象的保存方式之间的映射关系记录在ID对象中,或者单独存储ID对象和对应的序列化后的对象的保存方式之间的映射关系。
需要说明的是,管理模块的上述的三个子模块是按功能的划分结果,在实际应用中管理模块还可以有各种各样的实现形式。比如,可将三个子模块中的两个子模块的功能整合在一起(如将ID对象构造模块和序列化模块整合在一起);又比如,上述三个子模块各自独立可以单独调用,它们相互间的配合关系由调用者自己协调确定,等等。
在一种可能的应用场景中,管理模块可能部署在所针对的堆空间中。参见图2,针对一虚拟机的内存空间中的堆空间,堆空间包括新生代区域和老年代区域,管理模块初始被创建时存储于所述新生代区域,随着时间的推移,由于管理模块需持续进行工作,所以管理模块终会随着时间的增加而被从新生代区域搬移到老年代区域,这样,从较长时间的角度来看,管理模块将持续稳定部署于老年代区域。
在一种可能的应用场景中,管理模块可能部署在所针对的堆空间的新生代区域和老年代区域外,且管理模块与堆空间位于同一内存空间。参见图3,针对一虚拟机的内存空间中的堆空间,堆空间包括新生代区域和老年代区域,管理模块创建后被部署在该内存空间中异于新生代区域和老年代区域的位置,该位置可能位于所述堆空间之外;该位置也可能位于所述堆空间之中,例如堆空间中,除了新生代区域和老年代区域外,还包括永久代区域(永久代区域用于存储一直工作的对象),那么管理模块可能部署于该永久代区域。
在一种可能的应用场景中,管理模块可能部署的内存空间不同于其所针对的堆空间的内存空间(比如管理模块和堆空间分别部署于集群的不同节点的内存空间)。参见图4,管理节点部署于内存空间2,其所针对的堆空间部署在内存空间1,其中,内存空间1和内存空间2可能分属不同的虚拟机,所述不同的虚拟机之间具有通信连接。
基于上述管理模块,下面描述本发明实施例所涉及的管理新生代区域中的复杂对象的过程。参见图5,应用程序在新生代区域创建复杂对象后,ID对象构造模块根据复杂对象构建ID对象,所述ID对象作为复杂对象的“替代物”存储在新生代区域,这种“替代物”占用的内存空间小于复杂对象占用的内存空间;然后,序列化模块将复杂对象进行序列化处理,得到序列化后的对象;数据中转模块将序列化后的复杂对象进行数据中转,从而将复杂对象从新生代区域转移到新生代区域和老年代区域之外的存储区域进行保存。
基于上述管理模块,下面描述本发明实施例所涉及的应用程序调用对象的过程。参见图6,当应用程序请求使用该复杂对象时,ID对象构造模块获取所述对复杂对象的请求,该请求携带有复杂对象的标识。由于ID对象也包含有该复杂对象的标识,所以ID对象构造模块能够基于所述标识快速找到该ID对象,然后根据ID对象所指示的存储位置去进一步查找ID对象对应的序列化后的对象。
其中,根据ID对象所指示的存储位置去查找对应的序列化后的对象可以包括两种具体实现方式,一种实现方式是所述ID对象同时包含了标识和位置信息,所述位置信息指示了序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置,那么可根据所述位置信息查找到ID对象对应的序列化后的对象;另一种实现方式是建立序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置与该复杂对象之间映射关系,这样,可以将位置信息作为该复杂对象的标识。那么,可根据这样的标识查找到ID对象对应的序列化后的对象。
之后,可通过数据中转模块将序列化后的对象从所述存储区域转移回到新生代区域,然后,通过序列化模块对序列化后的对象进行反序列化处理,从而还原出原先的复杂对象。这样,应用程序就能够正常地使用所述复杂对象。
可以看到,本发明实施例中,在应用程序运行过程中,为了避免复杂对象被长时间引用而在老年代区域堆叠导致Full GC,而在复杂对象未被搬移到老年代区域之前,使用一个新的简单对象(ID对象)来在新生代区域中代替该复杂对象,后续在需要再次使用该复杂对象时又可以利用该简单对象(ID对象)重新还原出关联的复杂对象。由于ID对象占用的内存小于甚至远小于复杂对象占用的内存,所以一方面极大地延缓了新生代区域中的内存占用达到空间阈值的速度,也就是极大降低了新生代区域发生Minor GC的频率;另一方面,内存管理机制中,在对象熬过一轮Minor GC后对象的年龄才会加1,且对象被搬移到老年代区域的前提是对象的年龄达到预设阈值。所以,相比复杂对象而言,ID对象会较长时间地处在新生代区域。甚至来说,大部分ID对象可能在其年龄达到预设阈值之前,其生命周期就已经结束(即ID对象变成了不活跃对象),从而在Minor GC中被清除。所以,实施本发明实施例,有利于避免复杂对象进入老年代区域,从而也避免了复杂对象被长时间引用而在老年代区域堆叠导致Full GC的问题,且不影响应用程序正常使用对象,提升应用程序的性能。
参见图7,基于上文描述的内容,下面描述本发明实施例提供的一种管理应用程序对象的方法,所述方法应用于虚拟机,所述虚拟机不限于Java环境,还可以适用于其他的托管型语言,如Scala、Groovy等。所述虚拟机的内存空间包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象,所述存活轮次是指所述对象在所述第一存储区域中的年龄,第一存储区域每进行一轮垃圾回收(Garbage Collection,GC)动作,依然存活在第一存储区域的对象的年龄就会增加1,可以理解的,如果对象的存活轮次达到预设轮次(例如预设轮次为15),那么该对象就会被搬移出所述第一存储区域。该方法包括但不限于如下步骤:
步骤S101:在第一存储区域中,创建应用程序的第一对象。
例如,具体应用场景中,应用程序在接收到客户的数据之后,会创建***内部的复杂对象(如EventData),所述复杂对象即为所述第一对象。
步骤S102:在所述第一存储区域中,根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的存储空间小于所述第一对象占用的存储空间。
具体实施例中,所述第二对象包括第一对象的标识,所以第二对象可以作为第一对象的“替代物”存放于第一存储区域。具体实施例中,所述第二对象包括位置信息,所述位置信息指示了第一对象在所述第一存储区域之外的存储区域中的存储位置,以便于后续通过所述第二对象实现还原出对应的第一对象。可以看到,所述第二对象为比所述第一对象(复杂对象)更简单的对象,例如第一对象占用1MB的内存空间,而第二对象只占用50KB的内存空间。
需要说明的是,第二对象可参考前文描述的“ID对象”来具体实现,这里不再赘述。
步骤S103:将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。后续当应用程序需要调用所述第一对象时,再将所述存储区域的第一对象存入所述第一存储区域,以供所述应用程序调用。
具体实施例中,可将所述第一存储区域中的所述第一对象进行序列化处理,得到序列化后的第一对象,再将所述序列化后的第一对象保存到所述第一存储区域之外的存储区域。后续当应用程序需要调用所述第一对象时,再将所述存储区域的所述序列化后的第一对象存入所述第一存储区域,对所述序列化后的对象进行反序列化处理,还原出所述第一对象以供所述应用程序调用。
需要说明的是,本步骤的具体实现过程可参考前文的相关描述,这里不再赘述。
可以看到,本发明实施例中,在第一对象(复杂对象)未被搬移出第一存储区域之前,使用一个新的简单对象(第二对象)来在第一存储区域代替该复杂对象,后续在需要再次使用该第一对象时又可以利用第二对象重新还原出关联的第一对象。由于第二对象占用内存小于甚至远小于第一对象占用的内存,一方面极大地延缓了第一存储区域中的内存占用达到空间阈值的速度,也就是极大降低了第一存储区域发生GC的频率;另一方面,相比第一对象而言,由于第二对象的年龄难以达到预设阈值,所以第二对象会较长时间地处在第一存储区域。甚至来说,第二对象可能在其年龄达到预设阈值之前,其生命周期就已经结束(即第二对象变成了不活跃对象),从而在GC中被清除。所以,实施本发明实施例,有利于避免出现第一对象由于内存管理机制而被搬移出第一存储区域(如被搬移到类似于老年代区域的其他区域)的问题,且不影响应用程序正常使用对象,提升应用程序的性能。
参见图8,基于上述管理模块,下面描述本发明实施例提供的又一种管理应用程序对象的方法,所述方法应用于JVM虚拟机,所述虚拟机的内存空间包括堆空间,所述堆空间包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于所述预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于所述预设轮次的对象。可以理解的,新生代区域每进行一轮Minor GC,依然存活在新生代区域中的对象的年龄就会增加1,可以理解的,如果对象的存活轮次达到预设轮次,那么该对象就会被从新生代区域搬移到老年代区域。例如,预设轮次是15,那么存活轮次不能达到15次的对象就一直存在于新生代区域直至被清除;对于存活轮次能够达到(超过)15次的对象,说明该对象能熬过15个轮次的MinorGC,即其生命周期(即总生命时长)比新生代区域历经15个轮次的Minor GC的总时间还要长,可以理解的,这样的对象如果在现有技术下,就终究会被存储到老年代区域。该方法包括但不限于如下步骤:
步骤S201:在新生代区域中,创建应用程序的第一对象。
例如,具体应用场景中,业务请求进入应用程序后,应用程序会构造出相关的第一对象,该复杂对象位于新生代区域。
步骤S202:确定是否为所述第一对象构造所述第二对象;
由于新生代中创建的对象可能是生命周期较短(即存活轮次小于预设轮次)的对象,也有可能是生命周期较长的对象(即存活轮次能够达到预设轮次),而生命周期较短的对象肯定会在新生代区域中消亡而不会进入老年代区域;所以本发明实施例关注的是生命周期较长而导致会进入老年代区域的对象,这样的对象可称为复杂对象。所以,在一个对象创建后,需确定该对象是否是所述复杂对象,如果是复杂对象,则后续步骤S203执行为所述第一对象构造所述第二对象;可以理解的,如果不是复杂对象,则该对象终会在新生代区域中消亡,所以不需要执行本发明实施例的方案。
在一可能实施例中,确定所述第一对象的预估存活轮次是否大于或等于所述预设轮次,如果所述第一对象的存活轮次能够达到所述预设轮次,则所述确定结果是为所述第一对象构造所述第二对象。其中,所述预估存活轮次为预先估计的能够达到并超过预设轮次的存活轮次。举例来说,预设轮次为15,可以预先根据历史经验判断某个对象是复杂对象,例如预估该对象在新生代区域的存活轮次能够达到15,其生命周期能够比15个轮次的Minor GC的总时间还要长,那么这样的第一对象即为预估的复杂对象。那么,对于这样的第一对象,确定结果是为所述第一对象构造所述第二对象。
在一可能实施例中,确定特定对象类型的类的存活轮次是否大于或等于所述预设轮次;如果所述特定对象类型的类的存活轮次能够达到所述预设轮次,并且所述第一对象的对象类型属于所述特定对象类型,则所述确定结果是为所述第一对象构造所述第二对象,其中,类为具有相同属性和共同行为的一组特定对象类型的集合,可以理解的,如果某个类(例如某种数组)是复杂对象的集合,那么如果第一对象属于这个类,那么第一对象就是一种复杂对象。对于这样的第一对象,确定结果是为所述第一对象构造所述第二对象。
步骤S203:若所述确定结果是为所述第一对象构造所述第二对象,则在所述新生代区域中根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的内存空间小于所述第一对象占用的内存空间。
具体实施例中,所以第二对象即为前文所述“ID对象”,所述第二对象包括第一对象的标识,所以第二对象可以作为第一对象(即复杂对象)的“替代物”存放于第一存储区域。构造所述第二对象的过程中,输入参数主要有所述复杂对象以及指定的复杂对象的标识或者计算标识的算法,所述标识可以根据实际情况来生成,所述标识例如为复杂对象的UID、复杂对象的业务相关的标识等等;
具体实施例中,所述第二对象包括位置信息,所述位置信息指示了序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置,以便于后续通过所述第二对象实现还原出对应的复杂对象。可以看到,所述第二对象为比所述第一对象(复杂对象)更简单的对象,例如第一对象占用1MB的内存空间,而第二对象只占用50KB的内存空间。
其中,如果序列化后的复杂对象在所述新生代区域和老年代区域之外的存储区域中的存储位置与该复杂对象具有映射关系,那么,也可以将位置信息作为该复杂对象的标识。
需要说明的是,本步骤还可参考前文所述管理模块的ID对象构造模块来具体实现,这里不再赘述。
步骤S204:对所述第一对象进行序列化处理,得到序列化后的第一对象。
具体实施例中,对复杂对象进行序列化处理的过程中,输入参数主要为复杂对象,其他参数取决于具体实现。比如有多种可选的序列化算法,那么参数还包括第一对象和对应的复杂对象所使用的序列化算法之间的映射关系,或者该映射关系的线索。该映射关系记录在ID对象中,或者该映射关系被独立保存在固定位置。
需要说明的是,本步骤还可参考前文所述管理模块的序列化模块来具体实现,这里不再赘述。
步骤S205:将所述序列化后的第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。例如可将序列化后的第一对象保存到本地的其他存储器,或者,可将序列化后的对象保存到内存中除堆空间外的内存空间,或者,可通过网络将序列化后的对象传输到其他设备,等等。
具体实施例中,将所述序列化后的第一对象存储到存储区域的过程中,输入参数主要为复杂对象,其他参数取决于具体实现,比如有多种可选的保存方式,那么参数还包括ID对象和对应的序列化后的对象的保存方式之间的映射关系,或者该映射关系的线索。该映射关系记录在ID对象中,或者该映射关系被独立保存在固定位置。
需要说明的是,本步骤还可参考前文所述管理模块的数据中转模块来具体实现,这里不再赘述。
参见图9,基于上述管理模块,下面又一种管理应用程序对象的方法,该方法流程用于描述当应用程序的业务处理过程中需要使用第一对象(即复杂对象)时,利用第二对象(即ID对象)重新还原第一对象的过程。该方法包括但不限于如下步骤:
步骤S301:当应用程序需要调用所述第一对象时,接收应用程序对所述第一对象的调用请求;所述对象调用请求包括所述第一对象的标识。
步骤S302:在所述新生代区域中,根据所述第一对象的标识查找到所述第二对象。
步骤S303:通过所述第二对象获得位置信息,所述位置信息指示了所述序列化后的第一对象在所述新生代区域和所述老年代区域之外的存储区域中的存储位置。其中,如果序列化后的第一对象在所述新生代区域和老年代区域之外的存储区域中的存储位置与该第一对象具有映射关系,那么,也可以将位置信息作为该第一对象的标识。
步骤S304:根据所述存储位置查找位于所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象。
步骤S305:将所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象存入至所述新生代区域。
步骤S306:对所述序列化后的第一对象进行反序列化处理,得到原先的第一对象从而实现被应用程序调用。
具体实施例中,有多种可选的序列化算法,那么可以理解的,也对应有多种反序列化算法,那么就还需要根据第一对象和对应的第二对象所使用的序列化算法之间的映射关系,最终确定复杂对象对应的反序列化算法,然后对所述序列化后的第一对象进行反序列化处理,从而还原出所述第一对象。
可以看到,本发明实施例中,在应用程序运行过程中,为了避免复杂对象(即第一对象)被长时间引用而在老年代区域堆叠导致Full GC,而在复杂对象未被搬移到老年代区域之前,使用一个ID对象(即第二对象)来在新生代区域中代替该复杂对象,后续在需要再次使用该复杂对象时又可以利用该ID对象重新还原出关联的复杂对象。由于ID对象占用的内存小于甚至远小于复杂对象占用的内存,所以一方面极大地延缓了新生代区域中的内存占用达到空间阈值的速度,也就是极大降低了新生代区域发生Minor GC的频率,提高了内存的使用效率;另一方面,相比复杂对象而言,ID对象会较长时间地处在新生代区域。甚至来说,大部分ID对象可能在其年龄达到预设阈值之前,其生命周期就已经结束,从而在Minor GC中被清除。所以,实施本发明实施例,有利于避免复杂对象进入老年代区域,从而极大减缓了老年代区域中的对象数据量的增加,避免了复杂对象被长时间引用而在老年代区域堆叠导致Full GC的问题,且能够不影响应用程序正常使用对象,在业务处理中保持业务连续性,提升了应用程序的性能。
基于相同的发明构思,下面进一步提供了本发明实施例涉及的相关装置。
请参见图10,图10是本发明实施例提供的一种装置40的结构示意图,该装置40可用于实现本发明实施例的管理应用程序对象的方法,该装置40可以包括存储模块401、业务模块402和管理模块403。各个模块可以为软件模块。其中,各个功能模块的描述如下:
所述存储模块401包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象;
所述业务模块402用于,在所述第一存储区域中创建应用程序的第一对象;
所述管理模块403用于,根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象存储于在所述第一存储区域中,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。
具体实施例中,所述存储模块401具体包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于预设轮次的对象,所述新生代区域为所述第一存储区域;
所述业务模块402还用于确定是否为所述第一对象构造所述第二对象;
所述管理模块403具体用于,若所述确定结果是为所述第一对象构造所述第二对象,则根据所述第一对象构造所述第二对象;将所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
所述装置40的不同模块的实现过程可参考前文的描述,这里不再赘述。
请参见图11,图11是本发明实施例提供的一种***的结构示意图。所述***包括一个或者多个计算设备50,每个计算设备50包括处理器501、存储器502和通信接口503,处理器501、存储器502和通信接口503通过总线504连接。其中:
存储器602的数量为一个或多个,可以包括易失性存储器(Volatile Memory),例如随机存取存储器(Random Access Memory,RAM);存储器502也可以包括非易失性存储器(Non-Volatile Memory),例如只读存储器(Read-Only Memory,ROM)、快闪存储器(FlashMemory)、硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD);存储器502还可以包括上述种类的存储器的组合。存储器502可用于存储一组程序代码,以便于处理器501调用存储器502中存储的程序代码以实现本发明实施例的管理应用程序对象的方法。具体的,存储器502还配置有一个或多个内存空间,所述一个或多个内存空间对应于一个或多个虚拟机,所述内存空间中包括堆空间,所述堆空间包括前文所述第一存储区域,或者,所述堆空间包括前文所述新生代区域和老年代区域。具体的,所述存储器502还用于存储前文所述的管理模块,管理模块具体可为一种软件模块,管理模块可能保存在内存空间中,也可能保存在内存空间外;另外,管理模块可能保存在内存空间中的堆空间,也可能保存在内存中的堆空间外的区域;另外,管理模块和所针对的堆空间可能保存在不同的计算设备50的存储器上,也可能保存在相同计算设备的相同存储器,也可能保存在相同计算设备的不同存储器,具体实现方式还可参考图2-图4实施例的描述。
处理器501可以由一个或者多个通用处理器构成,例如中央处理器(CentralProcessing Unit,CPU)。处理器501可用于运行管理模块相关的程序代码。也就是说,处理器501执行程序代码可以实现管理模块的具体功能,实现本发明实施例的管理应用程序对象的方法。
通信接口503可以为有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与其他终端或网站进行通信。本发明实施例中,通信接口503具体可用于将接收应用程序调用对象的请求。其中:
所述存储器包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象;所述处理器用于,在所述第一存储区域中创建应用程序的第一对象;在所述第一存储区域中根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。
具体实施例中,所述存储器具体包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于预设轮次的对象,所述新生代区域为所述第一存储区域;所述处理器具体用于,确定是否为所述第一对象构造所述第二对象;若所述确定结果是为所述第一对象构造所述第二对象,则根据所述第一对象构造所述第二对象;将所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
实际应用中,所述***还可以包括更多或更少的部件,这里不作限制。所述***的不同器件的具体功能以及实现过程可参考前文的描述,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者任意组合来实现。当使用软件实现时,可以全部或者部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网络站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、微波等)方式向另一个网络站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,也可以是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD等)、或者半导体介质(例如固态硬盘)等等。
在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

Claims (19)

1.一种管理应用程序对象的方法,其特征在于,所述方法应用于虚拟机,所述虚拟机的内存空间包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象,所述方法包括:
在所述第一存储区域中,创建应用程序的第一对象;
在所述第一存储区域中,根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;
将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。
2.根据权利要求1所述的方法,其特征在于,所述虚拟机的内存空间包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于所述预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于所述预设轮次的对象,所述新生代区域为所述第一存储区域;
所述根据所述第一对象构造用于替代所述第一对象的第二对象之前,还包括:
确定是否为所述第一对象构造所述第二对象;
相应的,所述方法还包括:
若所述确定结果是为所述第一对象构造所述第二对象,则根据所述第一对象构造所述第二对象;
将所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
3.根据权利要求2所述的方法,其特征在于,所述确定是否要为所述第一对象构造所述第二对象,包括:
确定所述第一对象的预估存活轮次是否大于或等于所述预设轮次;如果所述第一对象的预估存活轮次超过所述预设轮次,则所述确定结果是为所述第一对象构造所述第二对象;或者,
确定特定对象类型的类的预估存活轮次是否大于或等于所述预设轮次;如果所述特定对象类型的类的预估存活轮次超过所述预设轮次,并且所述第一对象的对象类型属于所述特定对象类型,则所述确定结果是为所述第一对象构造所述第二对象。
4.根据权利要求2或3所述的方法,其特征在于,所述将所述新生代区域中的所述第一对象存储到所述新生代区域和所述老年代区域以外的存储区域之前,包括:
对所述第一对象进行序列化处理,得到序列化后的第一对象;
相应的,所述将所述新生代区域中的所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域,包括:
将所述序列化后的第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
当需要调用所述第一对象时,通过所述第二对象获得位置信息,所述位置信息指示了所述序列化后的第一对象在所述新生代区域和所述老年代区域之外的存储区域中的存储位置;
根据所述存储位置查找位于所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象;
将所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象存入至所述新生代区域;
对所述序列化后的第一对象进行反序列化处理。
6.根据权利要求5所述的方法,其特征在于,所述第二对象包括所述第一对象的标识;
在通过所述第二对象获得位置信息之前,所述方法还包括:
接收对象调用请求,所述对象调用请求包括所述第一对象的标识;
在所述新生代区域中,根据所述第一对象的标识查找到所述第二对象。
7.一种管理应用程序对象的装置,其特征在于,所述装置包括存储模块、业务模块和管理模块;其中:
所述存储模块包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象;
所述业务模块用于,在所述第一存储区域中创建应用程序的第一对象;
所述管理模块用于,根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象存储于在所述第一存储区域中,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。
8.根据权利要求7所述的装置,其特征在于,
所述存储模块具体包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于预设轮次的对象,所述新生代区域为所述第一存储区域;
所述业务模块还用于确定是否为所述第一对象构造所述第二对象;
所述管理模块具体用于,若所述确定结果是为所述第一对象构造所述第二对象,则根据所述第一对象构造所述第二对象;将所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
9.根据权利要求8所述的装置,其特征在于,
所述业务模块具体用于,确定所述第一对象的预估存活轮次是否大于或等于所述预设轮次;如果所述第一对象的预估存活轮次超过所述预设轮次,则所述确定结果是为所述第一对象构造所述第二对象;或者,
确定特定对象类型的类的预估存活轮次是否大于或等于所述预设轮次;如果所述特定对象类型的类的预估存活轮次超过所述预设轮次,并且所述第一对象的对象类型属于所述特定对象类型,则所述确定结果是为所述第一对象构造所述第二对象。
10.根据权利要求8或9所述的装置,其特征在于,所述管理模块具体用于,
对所述新生代区域中的所述第一对象进行序列化处理,得到序列化后的第一对象;
将所述序列化后的第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
11.根据权利要求10所述的装置,其特征在于,当需要调用所述第一对象时,所述管理模块还用于,
通过所述第二对象获得位置信息,所述位置信息指示了所述序列化后的第一对象在所述新生代区域和所述老年代区域之外的存储区域中的存储位置;
根据所述存储位置查找位于所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象;
将所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象存入至所述新生代区域;
对所述序列化后的第一对象进行反序列化处理。
12.根据权利要求11所述的装置,其特征在于,所述第二对象包括所述第一对象的标识;
所述管理模块具体用于,在通过所述第二对象获得位置信息之前,接收对象调用请求,所述对象调用请求包括所述第一对象的标识;在所述新生代区域中,根据所述第一对象的标识查找到所述第二对象。
13.一种管理应用程序对象的***,其特征在于,所述***包括一个或者多个计算设备,每个计算设备包括处理器和存储器,其中:
所述存储器包括第一存储区域,所述第一存储区域用于存储存活轮次小于预设轮次的对象;
所述处理器用于,在所述第一存储区域中创建应用程序的第一对象;在所述第一存储区域中根据所述第一对象构造用于替代所述第一对象的第二对象,所述第二对象占用的存储空间小于所述第一对象占用的存储空间;将所述第一存储区域中的所述第一对象存储到所述第一存储区域之外的存储区域。
14.根据权利要求13所述的***,其特征在于,
所述存储器具体包括新生代区域和老年代区域,所述新生代区域用于存储存活轮次小于预设轮次的对象,所述老年代区域用于存储存活轮次大于或等于预设轮次的对象,所述新生代区域为所述第一存储区域;
所述处理器具体用于,确定是否为所述第一对象构造所述第二对象;若所述确定结果是为所述第一对象构造所述第二对象,则根据所述第一对象构造所述第二对象;将所述第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
15.根据权利要求14所述的***,其特征在于,所述处理器具体用于,
确定所述第一对象的预估存活轮次是否大于或等于所述预设轮次;如果所述第一对象的预估存活轮次超过所述预设轮次,则所述确定结果是为所述第一对象构造所述第二对象;或者,
确定特定对象类型的类的预估存活轮次是否大于或等于所述预设轮次;如果所述特定对象类型的类的预估存活轮次超过所述预设轮次,并且所述第一对象的对象类型属于所述特定对象类型,则所述确定结果是为所述第一对象构造所述第二对象。
16.根据权利要求14或15所述的***,其特征在于,所述处理器具体用于,
对所述新生代区域中的所述第一对象进行序列化处理,得到序列化后的第一对象;
将所述序列化后的第一对象存储到所述新生代区域和所述老年代区域之外的存储区域。
17.根据权利要求16所述的***,其特征在于,当需要调用所述第一对象时,所述处理器还用于,
通过所述第二对象获得位置信息,所述位置信息指示了所述序列化后的第一对象在所述新生代区域和所述老年代区域之外的存储区域中的存储位置;
根据所述存储位置查找位于所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象;
将所述新生代区域和所述老年代区域之外的存储区域中的所述序列化后的第一对象存入至所述新生代区域;
对所述序列化后的第一对象进行反序列化处理。
18.根据权利要求17所述的***,其特征在于,所述第二对象包括所述第一对象的标识;
所述处理器具体用于,通过通信接口接收对象调用请求,所述对象调用请求包括所述第一对象的标识;在所述新生代区域中,根据所述第一对象的标识查找到所述第二对象。
19.一种非易失的计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码被计算设备执行时,所述计算设备用于执行权利要求1-6任一项所述的方法。
CN201810519626.1A 2018-05-28 2018-05-28 管理应用程序对象的方法,相关装置及*** Active CN110543357B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810519626.1A CN110543357B (zh) 2018-05-28 2018-05-28 管理应用程序对象的方法,相关装置及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810519626.1A CN110543357B (zh) 2018-05-28 2018-05-28 管理应用程序对象的方法,相关装置及***

Publications (2)

Publication Number Publication Date
CN110543357A true CN110543357A (zh) 2019-12-06
CN110543357B CN110543357B (zh) 2023-01-13

Family

ID=68700939

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810519626.1A Active CN110543357B (zh) 2018-05-28 2018-05-28 管理应用程序对象的方法,相关装置及***

Country Status (1)

Country Link
CN (1) CN110543357B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112231066A (zh) * 2020-10-29 2021-01-15 北京思特奇信息技术股份有限公司 一种基于jvm内存使用的优化处理方法及***
CN112764880A (zh) * 2021-01-19 2021-05-07 福建天泉教育科技有限公司 一种Java垃圾回收监控方法及终端

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5900001A (en) * 1997-04-23 1999-05-04 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection using a bifurcated data structure
US6865657B1 (en) * 2000-06-02 2005-03-08 Sun Microsystems, Inc. Garbage collector for a virtual heap
US7321909B1 (en) * 2004-12-23 2008-01-22 Sun Microsystems, Inc. Method and apparatus for forwarding references to objects concurrently with space-incremental garbage collection
WO2011045949A1 (ja) * 2009-10-13 2011-04-21 株式会社日立製作所 メモリ管理方法、メモリ管理プログラム、及び、情報処理装置
CN106648882A (zh) * 2015-11-04 2017-05-10 龙芯中科技术有限公司 基于虚拟机的垃圾回收方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5900001A (en) * 1997-04-23 1999-05-04 Sun Microsystems, Inc. Method and apparatus for optimizing exact garbage collection using a bifurcated data structure
US6865657B1 (en) * 2000-06-02 2005-03-08 Sun Microsystems, Inc. Garbage collector for a virtual heap
US7321909B1 (en) * 2004-12-23 2008-01-22 Sun Microsystems, Inc. Method and apparatus for forwarding references to objects concurrently with space-incremental garbage collection
WO2011045949A1 (ja) * 2009-10-13 2011-04-21 株式会社日立製作所 メモリ管理方法、メモリ管理プログラム、及び、情報処理装置
CN106648882A (zh) * 2015-11-04 2017-05-10 龙芯中科技术有限公司 基于虚拟机的垃圾回收方法及装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112231066A (zh) * 2020-10-29 2021-01-15 北京思特奇信息技术股份有限公司 一种基于jvm内存使用的优化处理方法及***
CN112231066B (zh) * 2020-10-29 2024-02-13 北京思特奇信息技术股份有限公司 一种基于jvm内存使用的优化处理方法及***
CN112764880A (zh) * 2021-01-19 2021-05-07 福建天泉教育科技有限公司 一种Java垃圾回收监控方法及终端
CN112764880B (zh) * 2021-01-19 2023-07-07 福建天泉教育科技有限公司 一种Java垃圾回收监控方法及终端

Also Published As

Publication number Publication date
CN110543357B (zh) 2023-01-13

Similar Documents

Publication Publication Date Title
US10649953B2 (en) Blockchain-based data migration method and apparatus
CN112214293B (zh) 一种无服务器架构下业务部署的方法和函数管理平台
JP5510556B2 (ja) 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム
EP3200393B1 (en) Method and device for virtual network function management
US20180025049A1 (en) Server and Data Processing Method
WO2018171392A1 (zh) 一种虚拟机扩缩容方法及虚拟管理设备
CN113037794B (zh) 计算资源配置调度方法、装置及***
WO2021109750A1 (zh) 节点管理方法、装置、设备、存储介质和***
CN112231108A (zh) 任务处理方法、装置、计算机可读存储介质及服务器
CN112463290A (zh) 动态调整计算容器的数量的方法、***、装置和存储介质
US20230185772A1 (en) Inode number distribution management method for distributed storage system and related component
CN109582459A (zh) 应用的托管进程进行迁移的方法及装置
CN110543357B (zh) 管理应用程序对象的方法,相关装置及***
CN113918647A (zh) 分布式数据库弹性伸缩方法、装置、设备和存储介质
US11080909B2 (en) Image layer processing method and computing device
CN103150159A (zh) 使用命名对象的标识符生成
CN110795202A (zh) 一种虚拟化集群资源管理***的资源分配方法以及装置
CN112346848A (zh) 一种管理内存池的方法、装置及终端
CN107408058B (zh) 一种虚拟资源的部署方法、装置及***
CN112015515B (zh) 一种虚拟网络功能的实例化方法及装置
CN114553859A (zh) 一种bmc配置管理方法、装置、电子设备及存储介质
CN112148513A (zh) 单点服务数据的转储方法、装置及存储介质
CN117687803B (zh) 租户资源分配方法、装置、设备及存储介质
CN117519988B (zh) 一种基于raid的内存池动态调配方法、装置
CN109542588B (zh) 一种用于在云环境下管理虚拟设备的方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right

Effective date of registration: 20220210

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technologies Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant