强引用
正常的对象,都是强引用。遇到gc时不会回收
软引用
创建软引用对象后,当gc时且内存不够的时候,就会回收
弱引用
遇到gc则直接回收。
一般用在ThreadLocal中,threadLocal中,threadLocalMap(每个线程都包含一个threadLocalMap)的Key类型是entry,继承于weakReference。这样当强引用对象释放掉引用,则threadlocalMap中的key也释放掉,否则容易产生内存泄漏(很难释放掉这块内存)!但是注意,key释放掉,可是value仍然存在,也会造成内存泄漏。锁当对象不用了,还是需要remove
虚引用
基本没用。管理堆外内存。
创建虚引用的时候需要一个对象和一个队列。
遇到gc,则虚引用直接被回收,同时会在队列中增加一个值,用来通知该对象已经被回收了。
弱引用有值的时候get()可以获取到值,但是虚引用获得不到