回答
的话题另一个好文章:
Java Reference Objects or How I Learned to Stop Worrying and Love OutOfMemoryError,与漂亮的图表
提取物:
正如您可能猜到的那样,将第三个新的可选状态添加到第e对象生命周期图使得混乱。
尽管文档显示从强烈可达到柔软,虚弱和幻影的逻辑进展到回收,但实际进度取决于程序创建的参考对象。
如果您创建WeakReference
但不创建SoftReference
,则对象直接从强可达性进展为弱可达性以最终确定收集。对象的生命周期,参考对象
重要的是要记住,不是所有的对象都连接到参考对象也很重要 - 事实上,他们很少应该是。
引用对象是一个间接层:你通过引用对象到达引用对象,显然你不希望在你的代码中间接寻找一层间接引用。
实际上,大多数程序将使用引用对象来访问程序创建的相对较小数量的对象。
参考和所指
的参考对象提供你的程序代码和其他一些物体之间间接层,叫做所指对象。
每个引用对象都围绕其指示对象构建,并提供一个get()方法来访问指示对象。一旦你创建了一个参考,你不能改变它的参考。一旦收集到对象,get()方法返回null。 Java Programming: References' Package
alt text http://www.pabrantes.net/blog/space/start/2007-09-16/1/referenceTypes.png
案例1::这是常规
甚至更实例的应用程序代码,软/弱引用,和指示对象之间的关系据说Object被认为是强烈可达的情况。情况2:有两条通往对象的路径,所以选择最强的一条路径,这是具有强引用的路径,因此该对象是强烈可达的。案例3:再次有两条路径通往对象,其中最强的一条是弱引用(因为另一条是幻影引用),所以该对象被认为是弱可达的。案例4:只有一条路径,最薄弱的环节是一个弱引用,所以该对象是弱可达的。情况5:只有一条路径和最弱的环节是幻影参考,因此该对象是幻象可达的。案例6:现在有两条路径,最强的路径是带有软引用的路径,所以现在这个对象被认为是可以轻松访问的。
+1不只是提供一个网址:) – 2010-01-06 12:45:42
之后,玩不同的gc模式:http://www.artima.com/insidejvm/ed2/gcP.html – VonC 2010-01-06 12:55:58
Java编程:参考资料'包解释了我什么我想了。现在我对引用是什么有清晰的认识。 – 2010-01-06 13:50:31
一篇文章,解释这些类型的引用(包括示例):http://weblogs.java.net/blog/enicholas/archive/2006/05/understanding_w.html
链接破碎。这就是为什么我们应该引用页面内容而不是提供链接的原因。 – Ravi 2017-08-12 06:49:03
有一个非常简单的规则:
- 强引用的对象是像
Object a = new Object()
编码标准位。 参考对象只要参考(上面的a
)是“可到达的”就不是垃圾。因此任何没有可达到的强引用可以被视为垃圾。
那么接下来我们就来看看非强引用类型:
- 弱引用对象可能会得到由JVM只要他们有资格GC收集(和
WeakReference
清除)。对a
的弱引用看起来像new WeakReference<Object>(a)
。弱引用在你想要一个缓存的情况下非常有用,只有当密钥存在于其他地方(例如HttpSession)时,才需要数据(如HttpSessions) - 软引用对象可能会在JVM中一直存在,直到它绝对需要恢复内存。软参考对于值长且可以收集的高速缓存很有用
我从来没有太确定幻影!
- 1. 有人可以解释两个查询之间的区别吗?
- 2. 在这种情况下,有人可以解释“参考”和“指针”之间的区别吗?
- 3. 有人可以解释&和&&的区别吗?
- 4. 有人可以解释测试场景和测试用例之间的区别
- 5. 有人可以解释@Remote/@Local或ejb中的@Stateless之间的区别吗?
- 6. 有人可以解释这两个JS代码片段之间的区别吗?
- 7. 有人可以用简单的英语解释ConfigurationSection和ConfigurationElement之间的区别吗?
- 8. 有人可以解释C++ 11和内联函数中的lambda之间的区别吗?
- 9. 有人可以解释这两个Youtube网址的区别吗?
- 10. 有人可以解释两个Python命令的区别吗?
- 11. 有人可以从“:”和“。”中解释Lua的区别吗?运营商?
- 12. 有人可以解释表达式属性名称和表达式属性值之间的区别吗?
- 13. 有人可以解释参数autovacuum_naptime吗?
- 14. 有人可以请参考变量解释这个答案吗?
- 15. 理解幻影参考VS相对于弱引用参考队列
- 16. 任何人都可以帮助解释系统DSN和用户DSN之间的区别吗?
- 17. 编译时调试和释放参考路径有区别吗?
- 18. 有人可以澄清两者之间的区别吗?
- 19. 最简单的说,任何人都可以向我解释JAAS,JACC和JASPIC之间的区别吗?
- 20. Applet和Servlet之间的区别以及它们的用法
- 21. eBay时区XML格式 - 有人可以解释它吗?
- 22. 任何人都可以解释XMLRPC,SOAP和C#Web服务之间的区别吗?
- 23. 任何人都可以解释闭包和匿名函数之间的区别吗?
- 24. 任何人都可以解释表达式,ng-bind和ng-model之间的区别吗?
- 25. 任何人都可以解释ng-bind和angularjs中表达式的区别吗?
- 26. 地标和注释之间的区别
- 27. onetomany和manytomany注释之间的区别
- 28. 参数和参数之间的区别
- 29. {参数}和参数之间的区别?
- 30. Vala中的原始指针和弱引用之间的区别?
相关但范围较窄:http://stackoverflow.com/questions/299659/what-is-the-difference-between-a-soft-reference-and-a-weak-reference-in-java – 2010-01-07 15:47:05