java虚拟机缓存多少_JVM缓存系统和方法与流程

fb25bd3b50e7fbdb8f254b15b0210ae7.gif

本发明属于jvm(javavirtualmachine,java虚拟机)缓存技术领域,尤其设于一种jvm缓存系统和方法。

背景技术:

对响应速度要求较高的系统,往往采用如图1所示的java虚拟机,该java虚拟机采用堆内缓存101来解决从数据库中获取数据速度慢的问题,通过预加载流程可以优先加载数据到jvm的堆内缓存101中,使用数据时直接从堆内存中获取数据,通过这这个方案可以提升数据访问速度。但是,随着数据量增大,大量的数据缓存和频繁的缓存更替在堆内缓存中积压,jvmgc(garbagecollection,垃圾回收)的频次和gc的时间(stw,stop-the-world,java中一种全局暂停现象)开始上升,这就导致系统能够为正常业务提供的服务时间减少,从而导致系统整体响应速度减慢。

技术实现要素:

本发明要解决的技术问题是为了克服现有技术中jvm缓存机制导致系统响应速度减慢的缺陷,提供一种jvm缓存系统和方法。

本发明是通过下述技术方案来解决上述技术问题:

本发明提供一种jvm缓存系统,包括java虚拟机和堆外缓存容器;

java虚拟机通过本地的方式申请和释放堆外缓存容器。

较佳地,java虚拟机采用lru算法(leastrecentlyused,最近最少使用淘汰算法)管理堆外缓存容器。

较佳地,java虚拟机采用lfu算法(leastfrequentlyused,最不经常使用淘汰算法)管理堆外缓存容器。

较佳地,所述缓存管理区用于在所述缓冲区中查询是否存在目标数据,如果存在所述目标数据,则所述缓存管理区用于获取所述目标数据,如果不存在所述目标数据,则所述缓存管理区用于从所述堆外缓存容器获取目标数据并存储至所述缓冲区。

较佳地,所述缓存管理区用于在所述缓冲区中查询是否存在目标数据,如果存在所述目标数据,则所述缓存管理区用于获取所述目标数据,如果不存在所述目标数据,则所述缓存管理区用于从所述堆外缓存容器获取目标数据并存储至所述缓冲区。

本发明还提供一种jvm缓存方法,包括以下步骤:

java虚拟机通过本地的方式申请和释放堆外缓存容器。

较佳地,jvm缓存方法还包括:

java虚拟机采用lru算法管理堆外缓存容器。

较佳地,jvm缓存方法还包括:

java虚拟机采用lfu算法管理堆外缓存容器。

较佳地,所述java虚拟机包括缓存管理区,所述缓存管理区包括缓冲区;所述jvm缓存方法还包括以下步骤:

所述缓存管理区从所述堆外缓存容器获取目标数据并存储至所述缓冲区。

较佳地,所述缓存管理区从所述堆外缓存容器获取目标数据并存储至所述缓冲区的步骤包括:

所述缓存管理区在所述缓冲区中查询是否存在目标数据,如果存在所述目标数据,则所述缓存管理区获取所述目标数据,如果不存在所述目标数据,则所述缓存管理区从所述堆外缓存容器获取目标数据并存储至所述缓冲区。

本发明的积极进步效果在于:本发明采用offheap(堆外缓存)方案减小缓存对gc的影响,使得业务服务时间延长,整体提升系统响应速度。

附图说明

图1为现有技术的java虚拟机的结构示意图。

图2为本发明的一较佳实施例jvm缓存系统的结构示意图。

图3为本发明的一较佳实施例jvm缓存方法的流程图。

具体实施方式

下面通过一较佳实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。

本实施例提供一种jvm缓存系统,参照图2,该jvm缓存系统包括java虚拟机201和堆外缓存容器202。java虚拟机通过本地(native)的方式申请和释放堆外缓存容器。与现有技术相比,本实施例的jvm缓存系统通过jna(javanativeaccess,一种开源的java框架)把数据缓存腾挪到java虚拟机的管辖范围之外以形成堆外缓存容器202,通过native的方式申请和释放缓存,减少数据缓存对jvmgc的影响。并且,本实施例的jvm缓存系统屏蔽掉了复杂的offheap缓存添加和获取的机制,简化了使用流程。

具体实施时,使用者从数据源中获取需要缓存的数据,java虚拟机的缓存管理区203通过jna向堆外开辟空间以形成堆外缓存容器,存放这些数据。这个过程需要从object(对象)转换成byte(二进制流)。这个转换是需要成本的,所以在缓存管理区203设置了一个缓冲区204存放object形态的数据(java虚拟机里的业务数据结构都是object形态的)。当java虚拟机的业务应用线程需要数据的时候优先在缓冲区204查询是否存在所需的目标数据;如果有,则直接获取object形态的数据;如果没有,则从堆外缓存容器202获取byte形态的数据再转换成object形态的数据,同时存放在缓冲区204。

进一步地,本实施例的jvm缓存系统中,java虚拟机采用lru算法管理堆外缓存容器。lru算法,即最近最少使用淘汰算法,该算法会使用双向链表来记录每一块内存的使用情况,最近访问的数据永远排在链头,当划定的总内存到达临界点,如果有新的缓存进来时会先把最近最少使用的缓存清理掉,即链表尾部的内存。这个算法侧重点是时间,即最近访问。也即,缓冲区的管理有一个过期机制,通过过期时间和lru算法管理。缓存数据是有时效性的,所以当缓存刷新线程拿到最新的数据时先保存到堆外缓存容器,然后检查缓冲区是否有旧数据,首先检查数据是否是在链尾(lru算法的链尾),如果不在链尾,则把最新数据覆盖到缓冲区并更新过期时间。如果在链尾,则检查是否已经过期,如果过期,则执行lru算法淘汰缓冲区缓存,如果没有过期则不做任何改动。

进一步地,java虚拟机采用lfu算法管理堆外缓存容器。lfu算法,即最不经常使用淘汰算法,该算法会使用一个map(映射)结构记录每一块内存的使用次数,每次使用缓存都会在使用次数上加1,当划定的总内存到达临界点,如果有新的缓存进来时会把访问次数最少的缓存块清理掉。这个算法侧重点是访问次数。

采用本实施例的jvm缓存系统,平均gc时长减少6.2%,半小时gc总时长减少8.9%,接口响应速度提升22.1%。

本实施例还提供一种jvm缓存方法,参照图3,该jvm缓存方法包括以下步骤:

步骤s301、java虚拟机通过本地的方式申请和释放堆外缓存容器。

作为一种较佳的实施方式,jvm缓存方法还包括:

步骤s302、java虚拟机采用lru算法管理堆外缓存容器。

作为一种较佳的实施方式,jvm缓存方法还包括:

步骤s303、java虚拟机采用lfu算法管理堆外缓存容器。

采用本实施例的jvm缓存方法,平均gc时长减少6.2%,半小时gc总时长减少8.9%,接口响应速度提升22.1%。

虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值