java基础---四种引用类型:强弱虚软
---强引用:不会被垃圾回收,宁肯抛出outofMemoryError错误也不会回收
---软引用SoftReference:内存不足的时候会被优先回收,回收之后还是内存不足才会抛出outofmemory异常。适合用于缓存对象。
---弱引用WeakReference:一个对象如果只有弱引用,那么就会被垃圾回收。常常用于hash表中,因为hash表允许存储java对象的引用,如果用强引用的话只要hash表存在,那么键值对象就不会回收。如果某个hash表生命周期很长,键值又多会很消耗内存。
例如:Thread类中用ThreadLocalMap来保存局部变量,内部维护一个hash表Entry数组保存键值对(threadlocal,局部变量)其中threadLocal使用弱引用来进行包装,因为ThreadlocalMap的生命周期和Thread的生命周期一样长,当一个THreadlocal没有外部强引用的时候,它只有弱引用,这个时候就会被垃圾回收,导致entry的key为空。但是value值不是空的,那么这个entry没法垃圾回收。但是threadlocal在调用set,remove,get方法的时候会清楚掉Threadlocalmap中key为空的value的值,来保障不会内存泄漏。
---虚引用: 虚引用是每次垃圾回收的时候都会被回收,通过虚引用的get方法永远获取到的数据为null,因此也被成为幽灵引用。
虚引用主要用于检测对象是否已经从内存中删除。