`
cfyme
  • 浏览: 273694 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jvm本地缓存常用实现方式学习

 
阅读更多

java缓存有很多种实现方式,

最简单的无非就是static HashMap显然是基于内存缓存,一个map就可以搞定引用对象的缓存,最简单也最不实用,首要的问题就是保存对象的有效性以及周期无法控制,这样很容易就导致内存急剧上升,周期无法控制可以采用SoftReference,WeakReference,PhantomReference这三种对象来执行,这三种都是弱引用,区别在于强度不同,弱引用对象的生命周期与JVM挂钩,JVM内存不够了就回收,这样能很好的控制OutOfMemoryError异常。 

 

例如代码:

public class SingletonMap {
    //一个本地的缓存Map
    private Map localCacheStore = new HashMap(); 
 
    //一个私有的对象,非懒汉模式
    private static SingletonMap singletonMap = new SingletonMap(); 
 
    //私有构造方法,外部不可以new一个对象
    private SingletonMap(){
    }  
 
    //静态方法,外部获得实例对象
    public static SingletonMap getInstance(){
        return singletonMap;
    }
 
    //获得缓存中的数据
    public Object getValueByKey(String key){
        return localCacheStore.get(key);
    }
    //向缓存中添加数据
    public void putValue(String key , Object value){
        localCacheStore.put(key, value);
    }
}

 

缺点:

1、  没有缓存大小的设置,无法限定缓存体的大小以及存储数据的限制(max size limit);

2、  没有缓存的失效策略(eviction policies);

3、  没有弱键引用,在内存占用吃紧的情况下,JVM是无法回收的(weak rererences keys);

4、  没有监控统计(statistics);

 

5、  持久性存储(persistent store);

 

集群内部,缓存的一致性如何保证?

如果采用ehcache的话,可以使用框架本身的JGroup来实现组内机器之间的缓存同步

如果是采用google的cacheBuilder的话,需要自己实现缓存的同步。

A、非实时生效数据:数据的更新不会时时发生,应用启动的时候更新即可,然后定时程序定时去清理缓存;

 

B、需要实时生效数据:启动时可预热也可不预热,但是缓存数据变更后,集群之间需要同步

 

 

分享到:
评论

相关推荐

    本地缓存与分布式缓存优缺点,使用

    1. 不能进行大量数据存储:本地缓存占用了应用进程的内存空间,比如 Java 进程的 JVM 内存空间,故不能进行大数据量存储。 2. 集群部署,数据可能存在不一致:需要应用服务保证数据一致性。 3. 应用重启,缓存数据...

    缓存框架-Ehcache学习笔记

    Ehcache 提供了本地内存缓存、磁盘存储以及分布式缓存的能力,使得应用程序能够快速访问频繁使用的数据,从而提高整体性能和响应速度。 ### 1. Ehcache 基本概念 - **Cache**: 缓存是存储数据的临时区域,用于快速...

    JVM内存空间分配笔记

    JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分进行详细介绍。 #### 二、程序计数器 程序计数器是一...

    处理缓存基本知识

    Ehcache 是一个广泛使用的开源缓存解决方案,支持本地缓存和分布式缓存。Guava Cache 是 Google Guava 库的一部分,提供了简单的缓存接口,适用于简单的缓存需求。Spring Cache 是 Spring 框架的一部分,提供了一种...

    JBossCache_讲解说明

    1. **提高应用的可用性和性能**:通过缓存常用的数据对象,减少对数据库的直接访问次数,从而降低数据库负载,提高系统整体的响应时间和处理能力。 2. **确保数据一致性**:JBoss Cache可以确保缓存中的数据状态与...

    Java对象缓存系统的实现,实现了LRU算法,并可以进行集群同步

    5. `oscache-2.4.1.jar` 是一个开源的缓存框架,提供了本地缓存和分布式缓存功能,可能在这个项目中用于辅助实现LRU缓存。 6. `commons-logging-1.1.jar` 是Apache Commons Logging库,它是一个日志抽象层,允许在...

    大促多级缓存方案及库存并发操作方案.docx

    GuavaCache是常用的本地缓存实现,具有轻量、易用等特点,并提供了多种被动更新机制: - `expireAfterAccess`:如果缓存项在设定时间内未被读或写,将被回收。 - `expireAfterWrite`:缓存项在设定时间内未被更新,...

    Coherence企业级缓存(三) 四种缓存类型.pdf

    - **本地缓存大小 (L)**: 仅对于Near缓存而言,指的是应用所在节点上的本地缓存空间大小。 #### 4. 总结 Coherence提供了多种缓存类型以适应不同的应用场景。复制缓存适用于需要极高读取性能且对写入性能要求不高、...

    JAVA的缓存应用介绍

    基本缓存的使用可能涉及简单的数据结构如HashMap或ConcurrentHashMap,用于临时存储常用的数据。随着应用复杂性的增加,开发者可能会转向使用专业的缓存框架,如 Ehcache、Guava Cache 或 Redis,这些框架提供更高级...

    基于eclipse的数据缓存处理插件的设计与实现大学论文.doc

    - **本地缓存**:如使用Java的HashMap或ConcurrentHashMap,存储在JVM内存中。 - **分布式缓存**:如Redis、Memcached,支持多服务器间的共享缓存。 - ** EhCache**:一种流行的企业级缓存解决方案,提供本地缓存...

    Java的缓存系统的设计.pdf

    8. **缓存预热**:在系统启动时预先加载常用数据到缓存,以提供更快的服务响应。 9. **缓存监控与调优**:持续监控缓存的性能,根据实际情况调整缓存参数,例如缓存的大小、过期策略等。 设计一个良好的Java缓存...

    iBATIS缓存介绍[借鉴].pdf

    - 本地缓存:存储在应用服务器的内存中,访问速度快,但不共享。 - 远程缓存:可能位于网络上的另一台服务器,可多节点共享,但网络通信可能增加延迟。 二. iBATIS高速缓存介绍 2.1 iBATIS高速缓存的关注点: ...

    java缓存技术深入剖析

    1. **本地缓存**:如Java的`WeakHashMap`、`SoftReference`等,通常用于单个JVM内部,适用于小规模的数据存储。 2. **分布式缓存**:如Hazelcast、Infinispan、Ehcache和广为人知的Apache Ignite,适用于多节点环境...

    架构师学习线路图,详细介绍java学习线路图,包括java多线程并发,JVM,spring,springboot,s.zip

    4. **SpringBoot**:SpringBoot简化了Spring应用的初始搭建和配置工作,它集成了大量常用的第三方库,如数据源、定时任务、缓存等。掌握SpringBoot意味着要理解起步依赖、自动配置、健康检查、Actuator监控、微服务...

    JCS1.3开源的缓存架构

    2. **本地磁盘缓存**:当内存中的缓存数据达到预设限制时,JCS 可以将数据写入到本地磁盘,以实现持久化存储。 3. **分布式缓存**:支持分布式缓存模式,允许多个节点共享同一份缓存,提高系统的可扩展性。 4. **LRU...

    【BAT必备】jvm面试题

    常用的JVM监控工具包括VisualVM、JConsole、JProfiler等。这些工具可以帮助开发者监控JVM的各个方面,比如CPU使用率、内存使用情况、线程信息、垃圾回收频率等。通过这些工具,开发者可以实时了解应用程序的运行状况...

    JVM与性能优化知识点整理.pdf

    3. 本地方法栈(Native Method Stack)是为执行本地方法(即非Java实现的方法)服务的,与Java栈类似。 4. 堆(Heap)是线程共享的内存区域,是垃圾回收的主要区域,存储对象实例。 5. 方法区(Method Area)同样是...

    JVM 38道面试题和答案.docx

    - **本地方法栈(Native Method Stack)**:服务于Java虚拟机调用的本地方法(C或C++实现)。 - **程序计数器(Program Counter Register)**:记录当前线程执行的字节码指令的地址。 2. **Java内存模型(JMM,...

    redis、activemq、juc、jvm、gc等知识点的脑图.rar

    JVM的内存模型包括堆、栈、方法区、程序计数器和本地方法栈。其中,堆内存存放对象实例,栈内存处理方法调用。垃圾回收(GC)是JVM自动管理内存的一部分,用于回收不再使用的对象所占用的空间,防止内存泄漏。GC算法...

Global site tag (gtag.js) - Google Analytics