基于软引用的单例缓存
来源:互联网 发布:手机淘宝人工客服 编辑:程序博客网 时间:2024/06/11 15:49
原创文章,转载请注明
把软引用和单例结合,实现一个简单的缓存。
1、软引用
软引用对于缓存的实现是非常适用的。软引用在内存存在压力的时候会强制进行卸载,销毁对象。
2、单例
单例实现的方式有很多,目前最流行的方式是懒汉模式。
这里通过静态内部类实现懒汉模式。
2.1、类加载准备阶段
我们知道类初始化之前需要加载,验证,准备,解析。
在准备阶段就已经会对静态方法区的内存进行分配了,只不过除了final修饰的静态成员变量之外的静态变量只会赋予默认值。实际的值需要在初始化阶段才会赋予。
知道了这一点,就知道为什么要通过静态内部类来实现了,在外部类被加载的时候,如果没有用到内部类,内部类是没有被加载的。这个时候就不会为它在静态方法区分配内存。
3、实现代码
现在看一下简单的实现方式吧
public class AuthCache {private static class CacheSingleton{private static SoftReference<Map<String,String>> softReferenceCache=new SoftReference(new HashMap<String,String>());private static AuthCache instance=new AuthCache();}public static AuthCache instance(){//缓存被垃圾回收器回收if(CacheSingleton.softReferenceCache.get()==null)CacheSingleton.softReferenceCache=new SoftReference(new HashMap<String,String>());return CacheSingleton.instance;}public static boolean isExists(String key){return CacheSingleton.softReferenceCache.get().containsKey(key);}public static boolean isSame(String key,String value){if(isExists(key)){String v=CacheSingleton.softReferenceCache.get().get(key);return value.equals(v);}else{return false;}}public static boolean add(String key,String value){CacheSingleton.softReferenceCache.get().put(key, value);return true;}public static void remove(String key){if(isExists(key)){CacheSingleton.softReferenceCache.get().remove(key);}}}
0 0
- 基于软引用的单例缓存
- 使用软引用构建敏感数据的缓存
- 软引用 弱引用 缓存
- 软引用 弱引用 缓存
- 软引用 弱引用 缓存
- 软引用 弱引用 缓存
- 单例实例化对象的引用
- 单例-Map-缓存
- 基于线程安全的单例模式
- 基于线程安全的单例
- 基于内部类的单例模式
- 基于多线程并发的单例模式
- Android基于源码的单例模式
- java 软引用 弱引用 缓存
- 用Java的软引用写一个山寨的缓存
- 使用软引用缓存Bitmap
- 使用软引用构建缓存
- 使用软引用构建缓存
- 单点登录实现(spring session+redis完成session共享)
- 嵌入式软件工程师经典笔试题
- Spring整合webservice CXF框架
- oracle sql优化
- hdu 1233&&九度oj 1017还是畅通工程
- 基于软引用的单例缓存
- 深入解析Android的自定义布局
- boost::variant的简单介绍
- JQuery实现页面跳转
- c++ STL函数
- WKWebView 使用的一些踩坑记录
- h5/jsp type=date设定默认值
- 指针和引用的区别,堆和栈的区别
- 加载驱动的三种方式