SoftReference, ReferenceQueue 自己控制内存

17 篇文章 0 订阅


在做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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值