论坛首页 Java企业应用论坛

【求讨论】java内存cache实现的疑惑

浏览 8059 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2011-05-26  
坛子里,讨论JVM的风气溅起啊
0 请登录后投票
   发表时间:2011-05-26  
http://suhuanzheng7784877.iteye.com/blog/1000646
希望对LZ有帮助,强static、引用都不会被回收,这也是为什么如果强引用没及时释放、静态变量使用超多,会发生内存溢出的error。
0 请登录后投票
   发表时间:2011-05-26  
shaomeng95 写道
kingkan 写道
引用


1、JVM会去扫描cache所在区域并根据一定的GC策略去回收内存,如果cache中的数据还没到设定的过期时间(假设cache根据设定的过期时间进行淘汰)就被GC掉了,岂不是白cache这些数据了又被干掉了?



cache中的数据还没到设定的过期时间是不会被回收的,JVM不会回收有强引用的对象。


引用


2、jvm是否存在不会被GC扫描的区域(编程可用的),如果有,在哪里?  如果没有,那oracle是否有计划未来增加这样的特性:设置一个区域,专门用来存储程序启动时需要加载的一些数据,GC不会光顾;这样的话,实现cache效率会更高,也更可控。



JVM中有一块地方叫DirectMemory的位置,这块是不受GC光顾的。深入来说,这块是用于IO的临时缓冲使用区,在sun的Hotspot中有个unsafe的类可以对它进行操作管理。关于这块区域的发展,同样也有公司在扩展这一块,terracotta公司收购了ehcache缓存后,就推出了BigMemory的产品,就是对这一区域的扩展实现,你可以去了解一下。

顺便提一下,terracotta公司最近也被欧洲的软件集成商Software AG收购了,业界的发展都不断的在整合。

ehcache,正准备去学习,多谢你的回复,看来真有这样的圣地存在啊(DirectMemory),请问兄台,有没有 不同虚拟机(hotspot,jrockit等)的GC策略对比的资料?


网络上很多hotspot的GC策略。

Jrockit没怎么用,回答不了你。
0 请登录后投票
   发表时间:2011-05-26  
public class SoftReference<T>extends Reference<T>
软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。软引用对象最常用于实现内存敏感的缓存。
我想这个说明可以对LZ有一点帮助
0 请登录后投票
   发表时间:2011-05-27  
被引用的情况下GC不会去回收,只有没有任何引用的情况下才可能执行回收,问题是没有引用的情况下你程序去调用缓存难道不会NullPointException?
0 请登录后投票
   发表时间:2011-05-27  
很明显LZ问这个问题的时候没google过。
0 请登录后投票
   发表时间:2011-05-27  
advantech 写道
很明显LZ问这个问题的时候没google过。

google最近被party搞的打不开啊
0 请登录后投票
   发表时间:2011-05-28  
为什么我没有权限投帖子呢?
0 请登录后投票
   发表时间:2011-05-30  
没看懂LZ是不懂回收的基本策略,还是咱没看懂LZ的意思,这话真纠结
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics