SoftReference, ReferenceQueue 自己控制内存

来源:互联网 发布:短域名批量生成 编辑:程序博客网 时间:2024/04/25 22:08


在做java程序的时候,内存监控,缓存设置,是提升性能的一个比较重要的环节,那么看看jdk本身自带的管理缓存,内存的主要设置。

定义如下两个变量,用来控制jvm中缓存的大小:

这做的特点就是:一旦达到了JVM的上限,就会把缓存在jvm的数据全部清掉,不会残留。


   private static final ReferenceQueue queue = new ReferenceQueue();

   private static final Map<File, SoftReference<BlockSet>> cache = new HashMap();


public static BlockSet get(File file) {
      SoftReference<BlockSet> ref = cache.get(file);
      BlockSet block = ref == null ? null : ref.get();
      if(block == null) {
         synchronized(cache) {
            ref = cache.get(file);
            block = ref == null ? null : ref.get();
            if(block == null) {
               block = new BlockSet();
               cache.put(file, new SoftReference<BlockSet>(block, queue));
            }
         }
      }
      block.init(file);
      return block;
   }


get 方法put 的是一个file文件,但是这个文件会经常不定时的被访问,那么如何高效快速,那就是使用缓存。

而SoftReference 就是 jdk 自带的缓存机制,用来控制缓存的,使用方式如上代码所示。

缺点:只要已达到jvm的maxmemory,在内存没有oom(Out of Memory)之前,就会释放所有的缓存数据。

使用不是很理想,所有需要借用第三方的缓存框架来弥补这个缺陷。


使用缓存的目的:

缓存我的常使用的数据,不常使用的可以不缓存,这样提高效率,减少IO操作。



0 0
原创粉丝点击