杨安平 2015-07-02 05:37 采纳率: 0%
浏览 4595

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

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

  • 写回答

2条回答 默认 最新

  • zwbVsAjava 2015-07-02 08:01
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献