论坛首页 Java企业应用论坛

理解 Java 的 GC 与 幽灵引用

浏览 60006 次
该帖已经被评为精华帖
作者 正文
   发表时间:2009-06-05  
freej 写道
使用 PhantomReference 就可以避免这个问题, 因为 PhantomReference 是在 finalize 方法执行后回收的,也就意味着此时已经不可能拿到原来的引用,  也就不会出现上述问题。

这句话说的有问题吧,不理解、

同问.
0 请登录后投票
   发表时间:2009-06-05  
赐教了...这些东西在作web开发中会用到么???
0 请登录后投票
   发表时间:2009-06-05  
高人到处有 唯有我不是 哎 ~。~
0 请登录后投票
   发表时间:2009-06-05  
taowen 写道
Cache必须基于ConcurrentHashMap吧。貌似你的getTable不能这么简单。。。


ConcurrentHashMap 的 key 并不是用 SoftReference 包装的, 所以要自己实现, 如果需要线程安全, 可以用 Collections.synchroziedMap(new SoftMap()) decorate 一下即可
0 请登录后投票
   发表时间:2009-06-05  
那就不是Concurrent HashMap啦,那是Synchronized的,效率差很远的。
0 请登录后投票
   发表时间:2009-06-06  
幽灵引用?说真的不看看ref包下的类层次,还真不知道如何使用这些东西。
也许就是摩尔定义的原因吧,所以才出现了ConcurrentHashMap才有了G1
0 请登录后投票
   发表时间:2009-06-06  
zhaomingzm_23 写道
幽灵引用?说真的不看看ref包下的类层次,还真不知道如何使用这些东西。
也许就是摩尔定义的原因吧,所以才出现了ConcurrentHashMap才有了G1

意思是:

使用PhantomReference 不用finalize

可以避免这个问题。
0 请登录后投票
   发表时间:2009-06-06  
kakaluyi 写道
为什么我们永远用不到的东东,可以被喷精。。。
,难道因为曲高,喷了就说明自己层次高


如果你是自己设计缓存的话 这其中还是很使用的
0 请登录后投票
   发表时间:2009-06-09  
还是有点不理解啊!
0 请登录后投票
   发表时间:2009-06-11  
请教下,有点晕
public void weakReference() {  
    Object referent = new Object();  
    WeakReference<Object> weakRerference = new WeakReference<Object>(referent);  
 
    assertSame(referent, weakRerference.get());  
      
    referent = null;  
    System.gc();  
      
    /** 
     * 一旦没有指向 referent 的强引用, weak reference 在 GC 后会被自动回收 
     */ 
    assertNull(weakRerference.get());  


public void softReference() {  
    Object referent = new Object();  
    SoftReference<Object> softRerference = new SoftReference<Object>(referent);  
 
    assertNotNull(softRerference.get());  
      
    referent = null;  
    System.gc();  
      
    /** 
     *  soft references 只有在 jvm OutOfMemory 之前才会被回收, 所以它非常适合缓存应用 
     */ 
    assertNotNull(softRerference.get());  
}  
代码差不多,只是SoftReference和WeakReference不同,引用效果就不同,能不能具体举例一下哪些是SoftReference,哪些是WeakReference
0 请登录后投票
论坛首页 Java企业应用版

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