在 Java 语言中,除了原始数据类型的变量,其他所有都是所谓的引用类型,指向各种不同的对象。
不记得在哪儿看到一个很有趣的比喻:
- 强引用就像大老婆,关系很稳固。
- 软引用就像二老婆,随时有失宠的可能,但也有扶正的可能。
- 弱引用就像情人,关系不稳定,可能跟别人跑了。
- 幻像引用就是梦中情人,只在梦里出现过。
JDK 1.2开始引入了该java.lang.ref
包,推荐文章Java Reference Objects,清晰介绍了几个引用类型的概念和作用。
有关reachability的例子,也是reachabilityFence的使用案例:Finalizer being run while class still in use (escape analysis bug)