Java 使用堆外内存(off-heap memory) 作为缓存

我们通常用的 Java 缓存基本可认为是扩展了 HashMap 或 ConcurrentHashMap 的实现,它们各自实现自己的缓存策略,如时间与空间的控制,生命周期管理,是否支持分布式,溢出时能否转储到磁盘。关于 Java 本地缓存的存储分为内存与磁盘,内存多数情况下指的是堆内内存(on-heap), 而介于堆内内存与文件存储之间的就是堆外内存(off-heap)

  1. 堆内存储(on-heap): 操作最快,无需序列化,但大量数据时会影响到 GC 的效率
  2. 堆外存储(off-heap): 存储在 Java 进程内存但非 JVM 堆内(不在 -Xmx 指定的内存范围内),使用或保存时需进行序列化/反序列化过程(在堆内与堆外转换),但不受 GC 影响,有助于提它来 GC 的效率
  3. 文件存储:不仅存在序列化与反序列化过程,还带 IO 操作,所以最慢,唯一优点就是大

我们查看一下当前 Spring 支持的缓存实现, Supported Cache Providers, 列有 Generic, JCache(JSR-107), EhCache 2.x, Hazelcast, Infinispan, Couchbase, Redis, Caffeine, Simple, 这其中无一支持堆外缓存,其中的 EhCache 要付费使用 EhCache 3(Big Memory) 才能支持 off-heap。 阅读全文 >>

相关推荐
serve the people8 小时前
python环境搭建 (六) Makefile 简单使用方法
java·服务器·python
jiunian_cn8 小时前
【Redis】zset数据类型相关指令
数据库·redis·缓存
重生之后端学习8 小时前
146. LRU 缓存
java·数据结构·算法·leetcode·职场和发展
萧曵 丶8 小时前
懒加载单例模式中DCL方式和原理解析
java·开发语言·单例模式·dcl
℡枫叶℡8 小时前
C# - 指定友元程序集
开发语言·c#·友元程序集
回忆是昨天里的海8 小时前
k8s部署的微服务动态扩容
java·运维·kubernetes
萧曵 丶8 小时前
单例模式 7 种实现方式对比表
java·单例模式
阿猿收手吧!8 小时前
【C++】constexpr动态内存与双模式革命
开发语言·c++
lang201509289 小时前
Tomcat Maven插件全解析:开发部署一体化
java·tomcat·maven
jiunian_cn9 小时前
【Redis】set数据类型相关指令
数据库·redis·缓存