Java中提供了4个级别的引用:强应用、软引用、弱引用和虚引用
直接持有对象的实例
特点:
用来描述一些还有用但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。
可用场景:
创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM就会回收早先创建的对象。PS:图片编辑器,视频编辑器之类的软件可以使用这种思路。
https://www.cnblogs.com/mjorcen/p/3968018.html
用来描述非必须的对象,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集之前。
弱引用就是只要JVM垃圾回收器发现了它,就会将之回收。
当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。一旦一个弱引用对象被垃圾回收器回收,便会加入到一个注册引用队列中。
软引用、弱引用都非常适合来保存缓存数据。如果这么做,当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。
而当内存资源充足时,这些缓存数据又可以存在相当长的时间,从而起加速系统的作用。
可用场景:
不想手动将对象从集合中剔除,让gc自动帮我们回收。 http://www.importnew.com/21206.html