1, 强引用:
特点:
(1)强引用可以直接访问对象
(2)强引用所指的对象, 在任何时候都不会被系统回收, 虚拟机宁愿抛出OOM异常, 也不会回收强引用的对象
(3)强引用可能导致内存泄漏
--例: User user1 = new User(); User user2=user1; 此时user1和user2都属于强引用
2, 软引用:(可被回收的引用)
特点:(通过java.langref.SoftReference类实现)
(1)比强引用要弱一些, GC未必会回收软引用的对象, 但是当内存资源紧张时, 软引用的对象就会被回收, 因此软引用不会引起内存溢出
3, 弱引用:(发现即回收)
特点: (可通过java.lang.ref.WeakReference类实现)
(1)比软引用更弱的一种引用,在系统GC时, 无论系统堆使用情况如何, 一但发现弱引用对象就会将其回收,ThreadLocal就是基于弱引用实现的
4, 虚引用:(对象回收跟踪)
特点: (可通过java.lang.ref.PhantomReference类实现)
(1)引用类型中最弱的, 跟没有引用几乎是一样的
(2)虚引用必须和引用队列一起, 它的作用的是跟踪垃圾回收过程(TraceCanReliveObj, ReferenceQueue)
注: 软引用和弱引用都非常适合保存那些可有可无的缓存数据, 这样在系统内存不足的时候, 这些缓存数据就会被回收, 不会导致内存溢出, 反之当系统内存充足时, 又可常驻内存中, 起到加速系统的作用