jiankangcs
杨安平
采纳率0%
2015-07-02 05:37 阅读 4.1k

使用java static做缓存 如何定时清理重置static数据

调用外部接口返回数转json加处理需要两分钟,但是数据变化不会太大,现在希望用
缓存存起来,定时重置缓存,使用公司内部缓存工具可以做到设置超时时间如果缓存为空则调用接口且重新为缓存赋值,但缓存失效时总会存在需要直接访问接口而导致访问太慢,所以我想是不是可以用static对数据做内存缓存,思路:用定时任务定时为静态变量重置赋值,但目前遇到如下几个疑问:
1.static变量如何回收,如果我先给变量赋予一个json对象1,再让变量等于另外一个json对象2,之前的对象1 jvm会做什么处理,直接回收掉还是一直留着内存中?
2.有没有其他方式做内存缓存?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • zwbVsAjava zwbVsAjava 2015-07-02 08:01

    1.你说的第一种情况:对于对象1,jvm会在内存中认为是无效的数据(即垃圾数据),等待jvm中的垃圾处理程序对对象1进行回收;至于jvm什么时间进行垃圾回收不是你可以控制,即使你手动调用Systemo.gc()或者finalize(),jvm也不一定会立即执行;
    2.做缓存的工具有很多,例如memcache和redis都可以;
    3.个人觉得你可以根据引起数据发生变化的原因(入口)处做文章,例如利用基于事件的模式,当有数据发生变化时,你触发一个事件去更新内存中数据是不是更好点,这样可以保证你内存中的一直是最新的,当然启动的时候你要看看是不是需要启动加载等(根据业务不同做法也可能不同)

    点赞 1 评论 复制链接分享
  • zzxzz00001 zzxzz00001 2015-07-02 11:06

    使用软引用 内存不够的时候软引用的缓存会被自动回收

    点赞 评论 复制链接分享

相关推荐