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

使用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 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿