Object obj = new Object(); //其中的obj就是强引用,new创建的对象所关联的引用就是强引用,JVM宁愿抛出OutOfMemory运行错误也不回收强引用 ,通常将 强引用赋值为null 就可以被垃圾回收
当JVM内存不足时会尝试回收弱引用对象,通常是用来实现内存敏感的缓存,如果有空闲内存就保留
threadLocal的map里的key为弱引用,使用过后应该remove 否则容易出现oom,因为可能key被回收了值还在
会在最近一次GC中被回收,ThreadLocal与动态代理都是基于这样一种引用
Cleanr机制,利用幻象引用监控对象的创建与销毁
比如我们创建一个对象,那么创建他的线程对它就是强可达
就是我们只能通过软引用才能访问到对象的状态
无法通过强引用或者软引用访问,只能通过弱引用访问,这时分接近finalize状态,当弱引用被清除时,就符合finalize的条件了
就是没有强,软,弱引用关联 并且finalize过了,只有幻象引用指向这个对象的时候
意味着对象可以被清除了
所有引用类型都是抽象类java.lang.ref.Reference的子类
如果我们错误的保持了强引用(比如 赋值给了static变量),那么对象可能没有机会变回弱引用了,就会产生内存泄漏