java_强引用

强引用

Object obj = new Object();  //其中的obj就是强引用,new创建的对象所关联的引用就是强引用,JVM宁愿抛出OutOfMemory运行错误也不回收强引用 ,通常将 强引用赋值为null 就可以被垃圾回收

软引用

当JVM内存不足时会尝试回收弱引用对象,通常是用来实现内存敏感的缓存,如果有空闲内存就保留

弱引用

threadLocal的map里的key为弱引用,使用过后应该remove 否则容易出现oom,因为可能key被回收了值还在

幻象引用或虚引用

会在最近一次GC中被回收,ThreadLocal与动态代理都是基于这样一种引用
 

Cleanr机制,利用幻象引用监控对象的创建与销毁

java_强引用_第1张图片

强可达

比如我们创建一个对象,那么创建他的线程对它就是强可达

软可达

就是我们只能通过软引用才能访问到对象的状态

弱可达

无法通过强引用或者软引用访问,只能通过弱引用访问,这时分接近finalize状态,当弱引用被清除时,就符合finalize的条件了

幻象可达

就是没有强,软,弱引用关联 并且finalize过了,只有幻象引用指向这个对象的时候

不可达状态

意味着对象可以被清除了

引用类型

所有引用类型都是抽象类java.lang.ref.Reference的子类

static变量的坑

如果我们错误的保持了强引用(比如 赋值给了static变量),那么对象可能没有机会变回弱引用了,就会产生内存泄漏

你可能感兴趣的:(java_强引用)