锁定老帖子 主题:理解 Java 的 GC 与 幽灵引用
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-05
freej 写道 使用 PhantomReference 就可以避免这个问题, 因为 PhantomReference 是在 finalize 方法执行后回收的,也就意味着此时已经不可能拿到原来的引用, 也就不会出现上述问题。
这句话说的有问题吧,不理解、 同问. |
|
返回顶楼 | |
发表时间:2009-06-05
赐教了...这些东西在作web开发中会用到么???
|
|
返回顶楼 | |
发表时间:2009-06-05
高人到处有 唯有我不是 哎 ~。~
|
|
返回顶楼 | |
发表时间:2009-06-05
taowen 写道 Cache必须基于ConcurrentHashMap吧。貌似你的getTable不能这么简单。。。
ConcurrentHashMap 的 key 并不是用 SoftReference 包装的, 所以要自己实现, 如果需要线程安全, 可以用 Collections.synchroziedMap(new SoftMap()) decorate 一下即可 |
|
返回顶楼 | |
发表时间:2009-06-05
那就不是Concurrent HashMap啦,那是Synchronized的,效率差很远的。
|
|
返回顶楼 | |
发表时间:2009-06-06
幽灵引用?说真的不看看ref包下的类层次,还真不知道如何使用这些东西。
也许就是摩尔定义的原因吧,所以才出现了ConcurrentHashMap才有了G1 |
|
返回顶楼 | |
发表时间:2009-06-06
zhaomingzm_23 写道 幽灵引用?说真的不看看ref包下的类层次,还真不知道如何使用这些东西。
也许就是摩尔定义的原因吧,所以才出现了ConcurrentHashMap才有了G1 意思是: 使用PhantomReference 不用finalize 可以避免这个问题。 |
|
返回顶楼 | |
发表时间:2009-06-06
kakaluyi 写道 为什么我们永远用不到的东东,可以被喷精。。。
,难道因为曲高,喷了就说明自己层次高 如果你是自己设计缓存的话 这其中还是很使用的 |
|
返回顶楼 | |
发表时间:2009-06-09
还是有点不理解啊!
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |