1.strong reference
就是常见的引用,比如
String str = "hello world";
其中,str就是strong reference,
在可达性分析中,如果此实例不可到达,此时才会被jvm回收.
2.soft reference
在jvm在抛出OOM之前会首先进行检查,如果soft reference实例没有强引用,
那么会首先进行垃圾回收回收此实例,
如果垃圾回收之后仍然内存不够,再抛出OOM.
3.weak reference
如果weak reference没有强引用引用它,那么在这个时候,
或者稍迟一点的时间,weak reference就会被回收,
使用例子:jdk的WeakHashMap,要注意的是因为WeakHashMap中Entry是weak reference引用,而value不是,
所以要显式从WeakHashMap里面清除value及其相关Entry。
4.phantom reference
这个和之前三种引用差异较大,主要是为了提供另一种类似于finalize机制,
实现了phantom reference的实例在不可到达的时候会被回收,和强引用回收时机一样。
除了strong reference,后面三种一般搭配ReferenceQueue使用,
在回收的时候通过queue.poll,返回被回收的实例,
然后进行日志打印,监控,补偿操作等处理.
参考链接:
http://www.onkarjoshi.com/blog/186/garbage-collection-and-reachability-strong-soft-weak-phantom-unreachable/
https://stackoverflow.com/questions/9809074/java-difference-between-strong-soft-weak-phantom-reference
strong/soft/weak/phantom reference比较
最新推荐文章于 2024-08-15 14:10:14 发布