文章目录
垃圾回收
以前的垃圾回收机制
1.引用计数法
每个创建出来的对象通过某种方法记录他被引用的数量,当引用的数量变为0时,说明该对象已经没有人去使用,回收该对象
缺点:
当两个对象互相引用时,那么无论这两个对象被不被使用都不会触发垃圾回收机制
2.可达性分析算法
如果一个对象直接或者间接的被根对象(GC Root)引用那么这个对象不用被回收
根对象
一定不会被当成垃圾回收的对象
实现步骤
1.Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象
2.扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以回收
哪些对象可以作为 GC Root ?
1.系统类
2.操作系统引用的java对象
3.被加锁的对象
4.正在活动的线程中局部变量引用的对象
4种引用
1.强引用
只有所有 GC Roots 对象都不通过(强引用)引用该对象,该对象才能被垃圾回收
2.软引用(SoftReference)
仅有软引用引用该对象时,在垃圾回收后,内存仍不足时会再次出发垃圾回收,回收软引用对象可以配合引用队列来释放软引用自身**(两次垃圾回收)**
3.弱引用(WeakReference)
仅有弱引用引用该对象时,在垃圾回收时,无论内存是否充足,都会回收弱引用对象可以配合引用队列