java - GC 会收集由 SoftReference 和 WeakReference 引用的对象吗?

标签 java weak-references soft-references

我有一个从 Map 到 SoftReferences 的缓存。当它们被添加时,它们会被放入另一个队列中,通过 gzip 或类似的方式进行延迟压缩。 我的想法是:我想对压缩队列中的对象进行弱引用,这样当压缩器任务到达对象时,如果它已经消失,我们就不需要费心压缩它了——而且压缩器的队列也不会”不要让原本会被 GC 处理的对象保持 Activity 状态。

那么如果只有一个 SoftReference 和一个 WeakReference,SoftReference 的语义是否仍然适用?

最佳答案

是的,SoftReferences 的语义仍然适用:SoftReferences 比 WeakReferences 更强大。

对于 GC,WeakReferences 基本上被视为不存在。因此,只有弱可达性的对象可能会立即被 GC 处理。但是,仅当需要满足内存需求时,才考虑将 SoftReferences 作为最强类型访问的对象用于 GC。

所以如果同时存在软引用和弱引用,则应用 SoftReference 的语义。

Weak reference objects, which do not prevent their referents from being made finalizable, finalized, and then reclaimed.

http://download.oracle.com/javase/6/docs/api/java/lang/ref/WeakReference.html

Soft reference objects, which are cleared at the discretion of the garbage collector in response to memory demand. Soft references are most often used to implement memory-sensitive caches.

http://download.oracle.com/javase/6/docs/api/java/lang/ref/SoftReference.html

关于java - GC 会收集由 SoftReference 和 WeakReference 引用的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3851915/

相关文章:

java - 在jsp中将列表打印为表格

java - 如何在用户点击的 TextView 上显示数字?

java - 测试使用 SoftReference<T> 的代码

java - 如果有一个二级软引用对象,GC会做什么

java - 在 JPA 中可以将已删除的实体保留在 @OneToMany 端的集合中吗?

java - 哪个版本的 Eclipse 支持 Java 8?

android - WeakReference的get方法返回的强引用会导致AsyncTask onProgressUpdate内存泄漏吗?

ios - objective-C : Weak attritube don't work as expected

objective-c - 在 Objective-C(和 Swift)中弱属性是线程安全的吗?

java - SoftReference 过早地收集垃圾