Caffeine与Guava对比

Caffeine/Guava性能测试

处于性能优化考虑,项目准备将本地缓存从guava cache 转到caffeine cache,于是着手对caffeine进行了一波调研,首先通过一系列测试,通过caffeine和guava从结果来看,在相同cpu负载下,Caffeine Cache的读取和写入速度优于Guava Cache,差距在4倍以上。

但在内存占用方面来看,两者无明显区别。

测试环境:

  • CPU:i7-8700 3.20GHz 6核
  • 内存:16g
  • 系统:Windows 10
  • JDK版本:8
  • IDE:IDEA
  • 内存监控工具:JProfiler

一、速度测试:

测试逻辑:

  • 构建Cache,load方法为简单的字符串拼接
  • 将250000个字符串加载到cache后,启动任务线程,预热10s后,开始计时,统计每10秒的count,共6轮,最后统计每轮中的每秒平均值

测试结果:

image-20200813143631711

(1) 6个线程纯读:

CEB58087-97C6-49B4-9E51-359CBDB199F7

(2) 4个线程读+2个线程写:

7A64933F-034B-42CC-B317-4E3E4CCF5788

二、内存占用测试

测试逻辑:

  • 基于项目中使用内存缓存需求最大的数据,构建缓存
  • 先初始化缓存对象,10s后将数据库中的20w+条数据存入缓存中,并主动触发一次gc,对比剩余内存占用

测试结果:

Guava和Caffeine在加载完24w条柜机数据后,通过GC清理掉临时占用的内存,最后都保持了420M的内存占用,无明显区别,整个内存变化如下:

(1)Guava:

1F084945-84E5-43B5-9F18-08959453A005

(2)Caffeine:

B4F8F7BC-684F-44A5-ACC7-08CC0B6BD314

三、源码分析

Caffeine是在guava基础上进行优化的产物,也是带着替代guava的目的而来的,因而在使用上差别不大,但是通过测试可以明显看到Caffeine在性能上的优势,进而,通过源码,进一步探究了一下Caffeine和guava的区别

一、初始化

Caffeine、Guava都通过builder的方式进行初始化操作,生成缓存对象,通过builder方式可以生成两种缓存对象LoadingCache(同步填充)和Cache(手动填充),LoadingCache继承Cache,相比于Cache,提供了get获取值时,如果不存在值,自动通过CacheLoader的load方法下载数据并返回的功能,此处load方法在初始化时通过重写进行定义,项目中基本通过同步填充的方式,从数据库中加载数据,需要提的是,通过手动加载的方式,也可以在put时传递可执行函数

方式一 cache:

//guava
Cache cache = CacheBuilder.newBuilder()
        .maximumSize(maximumSize).
        expireAfterWrite(expireAfterWriteDuration, timeUnit)
        .recordStats().build(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值