转载

Java 引用类型

Java中提供了4个级别的引用:强应用、软引用、弱引用和虚引用

强应用

直接持有对象的实例

特点:

    1. 强引用可以直接访问目标对象;
    1. 强引用锁指向的对象在任何时候都不会被系统回收。JVM宁愿抛出OOM异常也不回收强引用所指向的对象; 可能导致内存泄露。

软引用(Soft Reference)

用来描述一些还有用但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。

可用场景:

创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。PS:图片编辑器,视频编辑器之类的软件可以使用这种思路。

https://www.cnblogs.com/mjorcen/p/3968018.html

弱引用(Weak Reference)

用来描述非必须的对象,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集之前。

弱引用就是只要JVM垃圾回收器发现了它,就会将之回收。

当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。一旦一个弱引用对象被垃圾回收器回收,便会加入到一个注册引用队列中。

软引用、弱引用都非常适合来保存缓存数据。如果这么做,当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。

而当内存资源充足时,这些缓存数据又可以存在相当长的时间,从而起加速系统的作用。

可用场景:

不想手动将对象从集合中剔除,让gc自动帮我们回收。 http://www.importnew.com/21206.html

原文  http://rustfisher.github.io/2018/06/09/Java_note/Java_reference_note/
正文到此结束
Loading...