Java对象的引用方式(强引用, 软引用, 弱引用, 虚引用)

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)

注: 软引用和弱引用都非常适合保存那些可有可无的缓存数据, 这样在系统内存不足的时候, 这些缓存数据就会被回收, 不会导致内存溢出, 反之当系统内存充足时, 又可常驻内存中, 起到加速系统的作用

你可能感兴趣的:(java,Java)