https://www.jianshu.com/p/825cca41d962
引用的本质是,可以把jvm内存当做一个大的池化技术,池化技术最重要的是逐出策略。那么,这三种引用对应的逐出策略是不一样的,具体可以看上面链接里的介绍。简单来说,强引用的逐出策略是,如果一个对象没有了强引用,就逐出。软引用是,如果没有了强引用,gc是不会把这个对象逐出的,除非在gc后,仍然内存不够用,这时会进行第二次gc,并把这些对象逐出。其他俩个看上面的链接介绍。
引用对象的另一个作用是,在jvm进行回收的时候,会进行回调通知,利用这个功能可以实现一些有意思的事情,比如WeakReferenceMap. 具体实现可以看WeakReference的实现和WeakReferenceMap的实现。 WeakReferenceMap其实也是池化技术的一种特殊场景,正常的是cache的对象本身的过期逐出,而WeakReferenceMap实现的是,key过期后,对value的逐出。