掌桥专利:专业的专利平台
掌桥专利
首页

一种JVM内存管理方法、装置、设备及可读存储介质

文献发布时间:2023-06-19 10:05:17


一种JVM内存管理方法、装置、设备及可读存储介质

技术领域

本申请涉及计算机技术领域,特别涉及一种JVM内存管理方法、装置、设备及可读存储介质。

背景技术

由于Java语言的特性及系统间解耦的双重要求,JVM(Java Virtual Machine,Java虚拟机)在接收到报文后会通过JVM内的包装类进行数据封装。在该场景下,JVM就会承受大于原报文大小的对象缓存,如基础数据类型(int、long、byte等)到包装类型(Integer、Long、Byte)的增长(增加对象头大小,占用24byte),又如对原报文的接收封装类,同样也会造成引用对象头的成倍增长。

若Java对象在短时间内创建比较频繁,就很容易造成JVM内存不够用,故JVM的GC(Garbage Collection,垃圾回收)也会变的十分频繁。因为JVM内存不够用时,垃圾回收就会启动。而垃圾回收会占用CPU资源,影响Java对象的创建,因此导致JVM的处理性能降低。

因此,如何避免JVM频繁进行垃圾回收,是本领域技术人员需要解决的问题。

发明内容

有鉴于此,本申请的目的在于提供一种JVM内存管理方法、装置、设备及可读存储介质,以避免JVM频繁进行垃圾回收。其具体方案如下:

第一方面,本申请提供了一种JVM内存管理方法,包括:

若到达待清除对象的清除条件,则基于虚引用对象标记所述待清除对象;

确定所述JVM的系统类型,并根据所述系统类型调用相应动态库,以获取所述虚引用对象和所述待清除对象的内存地址;

删除所述虚引用对象和所述待清除对象,以释放所述内存地址。

优选地,所述释放所述内存地址之后,还包括:

调用所述JVM中的内存整理线程整理内存碎片。

优选地,所述基于虚引用对象标记所述待清除对象之前,还包括:

构造能够接收任意类型对象的所述虚引用对象。

优选地,所述释放所述内存地址之后,还包括:

将所述待清除对象添加至引用队列。

优选地,所述内存地址包括:内存起始地址和偏移量。

优选地,所述根据所述系统类型调用相应动态库,包括:

若所述系统类型为Windows,则利用JNI或JNA调用dll库。

优选地,所述根据所述系统类型调用相应动态库,包括:

若所述系统类型为Linux,则利用JNI或JNA调用so库。

优选地,所述清除条件由用户根据程序运行逻辑预设。

第二方面,本申请提供了一种JVM内存管理装置,包括:

标记模块,用于若到达待清除对象的清除条件,则基于虚引用对象标记所述待清除对象;

执行模块,用于确定所述JVM的系统类型,并根据所述系统类型调用相应动态库,以获取所述虚引用对象和所述待清除对象的内存地址;

释放模块,用于删除所述虚引用对象和所述待清除对象,以释放所述内存地址。

第三方面,本申请提供了一种JVM内存管理设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序,以实现前述公开的JVM内存管理方法。

第四方面,本申请提供了一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述公开的JVM内存管理方法。

通过以上方案可知,本申请提供了一种JVM内存管理方法,包括:若到达待清除对象的清除条件,则基于虚引用对象标记所述待清除对象;确定所述JVM的系统类型,并根据所述系统类型调用相应动态库,以获取所述虚引用对象和所述待清除对象的内存地址;删除所述虚引用对象和所述待清除对象,以释放所述内存地址。

可见,本申请为待清除对象设置了清除条件,若到达待清除对象的清除条件,则基于虚引用对象标记待清除对象;确定JVM的系统类型,并根据系统类型调用相应动态库,以获取虚引用对象和待清除对象的内存地址;删除虚引用对象和待清除对象,以释放内存地址。本申请依照清除条件清除虚引用对象和待清除对象,可及时回收JVM内存,保障有较多JVM内存可用,从而避免垃圾回收启动,也就是尽可能不让垃圾回收启动,因此可以降低垃圾回收对Java对象创建的影响,提高了JVM的处理性能。

相应地,本申请提供的一种JVM内存管理装置、设备及可读存储介质,也同样具有上述技术效果。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请公开的一种JVM内存管理方法流程图;

图2为本申请公开的一种JVM内存管理系统示意图;

图3为本申请公开的一种JVM内存管理装置示意图;

图4为本申请公开的一种JVM内存管理设备示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

目前,若Java对象在短时间内创建比较频繁,就很容易造成JVM内存不够用,故JVM的GC(Garbage Collection,垃圾回收)也会变的十分频繁。因为JVM内存不够用时,垃圾回收就会启动。而垃圾回收会占用CPU资源,影响Java对象的创建,因此导致JVM的处理性能降低。为此,本申请提供了一种JVM内存管理方案,能够避免JVM频繁进行垃圾回收。

参见图1所示,本申请实施例公开了一种JVM内存管理方法,包括:

S101、若到达待清除对象的清除条件,则基于虚引用对象标记待清除对象。

虚引用顾名思义,就是形同虚设,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。

虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用必须和引用队列(ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。以便后续要用该对象时,根据引用队列提示该对象已不存在。

在一种具体实施方式中,清除条件由用户根据程序运行逻辑预设。例如:在程序运行至第100行之后,某一对象就没有用了,那么该对象的清除条件即为程序运转至第100行。本申请中的对象均为Java对象。

在一种具体实施方式中,基于虚引用对象标记待清除对象之前,还包括:构造能够接收任意类型对象的虚引用对象。即:虚引用对象可以引用JVM中的任意类型的对象,从而及时清除任意类型的对象,以腾出内存地址。

在一种具体实施方式中,所述释放所述内存地址之后,还包括:将所述待清除对象添加至引用队列。引用队列用于记录已经被垃圾回收的对象。

S102、确定JVM的系统类型,并根据系统类型调用相应动态库,以获取虚引用对象和待清除对象的内存地址。

在一种具体实施方式中,内存地址包括:内存起始地址和偏移量。

在一种具体实施方式中,根据系统类型调用相应动态库,包括:若系统类型为Windows,则利用JNI或JNA调用dll库。

在一种具体实施方式中,根据系统类型调用相应动态库,包括:若系统类型为Linux,则利用JNI或JNA调用so库。

其中,dll库和so库中创建有获取内存地址的程序。

S103、删除虚引用对象和待清除对象,以释放内存地址。

在一种具体实施方式中,释放内存地址之后,还包括:调用JVM中的内存整理线程整理内存碎片,即:将内存碎片中的数据迁移到一起进行存储,从而使得未使用的内存地址连续,为JVM存储新对象提供帮助。

可见,本申请实施例为待清除对象设置了清除条件,若到达待清除对象的清除条件,则基于虚引用对象标记待清除对象;确定JVM的系统类型,并根据系统类型调用相应动态库,以获取虚引用对象和待清除对象的内存地址;删除虚引用对象和待清除对象,以释放内存地址。本申请依照清除条件清除虚引用对象和待清除对象,可及时回收JVM内存,保障有较多JVM内存可用,从而避免垃圾回收启动(即避免频繁GC),也就是尽可能不让垃圾回收启动,因此可以降低垃圾回收对Java对象创建的影响,提高了JVM的处理性能。

参见图2所示,本申请实施例公开了一种JVM内存管理系统,包括:声明装置、标记装置、触发装置及清理装置。其中,声明装置用于在JVM中声明创建虚引用对象;标记装置用于利用虚引用对象标记需要GC的对象;触发装置用于触发垃圾回收;清理装置用于清理虚引用对象和被标记对象的内存地址。

具体的,实现声明装置需要提供带参构造,声明虚引用PhantomRef,以接收任意形式的对象类型;创建后(由标记装置标记后,生命周期由此开始),之后可调用触发装置自动进入内存清理过程。

触发装置可以使用JNI或JNA技术,依据JVM的操作系统类型选择性对接native方法,所以该部分实现以下两点即可:1、编写native方法,由虚引用类构造方法直接调用。2、基于不同的系统类型,利用JNI或者JNA调用不用动态库,以对接动态库中的native方法。若操作系统类型为Windows,则调用dll库。若操作系统类型为Linux,则调用so库。

清理装置基于操作系统的不同,可分为不同的实现。如Windows系统下,需要提供dll库的方式。Linux系统下,需要提供so库的方式。但是无论什么形式的动态库,实现逻辑均为以下几点:

1、需要对接java虚引用类PhantomRef的路径,对接上native方法。

2、将虚引用对象和待清除对象的内存起始位置、偏移量获取到,将该内存片段下的占用全部释放。

3、调用虚拟机的内存整理线程整理内存碎片,将内存碎片中的数据迁移到一起进行存储,保证JVM内存的连续性,以便虚拟机能够较好的分配新对象的内存地址。

可见,本实施例可以及时回收JVM内存,能够应对短时间内创建有大量对象的场景,且保障有较多JVM内存可用,从而尽可能不让垃圾回收启动,因此可以降低垃圾回收对Java对象创建的影响,提高了JVM的处理性能。

下面对本申请实施例提供的一种JVM内存管理装置进行介绍,下文描述的一种JVM内存管理装置与上文描述的一种JVM内存管理方法可以相互参照。

参见图3所示,本申请实施例公开了一种JVM内存管理装置,包括:

标记模块301,用于若到达待清除对象的清除条件,则基于虚引用对象标记待清除对象;

执行模块302,用于确定JVM的系统类型,并根据系统类型调用相应动态库,以获取虚引用对象和待清除对象的内存地址;

释放模块303,用于删除虚引用对象和待清除对象,以释放内存地址。

在一种具体实施方式中,还包括:

整理模块,用于调用JVM中的内存整理线程整理内存碎片。

在一种具体实施方式中,还包括:

构造模块,用于构造能够接收任意类型对象的虚引用对象。

在一种具体实施方式中,内存地址包括:内存起始地址和偏移量。

在一种具体实施方式中,执行模块具体用于:

若系统类型为Windows,则利用JNI或JNA调用dll库。

在一种具体实施方式中,执行模块具体用于:

若系统类型为Linux,则利用JNI或JNA调用so库。

在一种具体实施方式中,清除条件由用户根据程序运行逻辑预设。

在一种具体实施方式中,还包括:

记录模块,用于将所述待清除对象添加至引用队列。

其中,关于本实施例中各个模块、单元更加具体的工作过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。

可见,本实施例提供了一种JVM内存管理装置,该装置可及时回收JVM内存,保障有较多JVM内存可用,从而避免垃圾回收启动(即避免频繁GC),也就是尽可能不让垃圾回收启动,因此可以降低垃圾回收对Java对象创建的影响,提高了JVM的处理性能。

下面对本申请实施例提供的一种JVM内存管理设备进行介绍,下文描述的一种JVM内存管理设备与上文描述的一种JVM内存管理方法及装置可以相互参照。

参见图4所示,本申请实施例公开了一种JVM内存管理设备,包括:

存储器401,用于保存计算机程序;

处理器402,用于执行所述计算机程序,以实现上述任意实施例公开的方法。

下面对本申请实施例提供的一种可读存储介质进行介绍,下文描述的一种可读存储介质与上文描述的一种JVM内存管理方法、装置及设备可以相互参照。

一种可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述实施例公开的JVM内存管理方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。

本申请涉及的“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法或设备固有的其它步骤或单元。

需要说明的是,在本申请中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的可读存储介质中。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

相关技术
  • 一种JVM内存管理方法、装置、设备及可读存储介质
  • 设备信息管理方法、装置、设备及计算机可读存储介质
技术分类

06120112410349