垃圾回收算法:

1、引用计数法

每个对象有一个引用属性,新增一个引用时加1,引用释放时减1,计数为0得时候可以回收。

但这种计算方法无法解决循环引用的问题。

 

2、可达性分析算法

(1)从GCRoot开始向下搜索,搜索所走过的路径被称作引用链,当一个对象到GCRoot没有任何引用链相连时,则证明此对象是不可用的,那么虚拟机就可以判定回收。

(2)GCRoot包含:

虚拟机栈中引用的对象

方法区中静态属性引用的对象

方法区中常量引用的对象

本地方法栈中引用的对象

 

不同的引用类型:

(1)强引用:通过关键字new的对象就是强引用对象,强引用对象任何时候都不会被回收,即使OOM也不会被回收。

(2)软引用:使用java.lang.ref.SoftReference引用,当JVM堆空间不足时,就会被回收。

(3)弱引用:使用java.lang.ref.WeakReference引用,在GC发现弱引用的时候,就会被回收。

(4)虚引用:使用PhantomReference引用,随时可能被回收。

posted on 2021-11-19 09:50  Sempron2800+  阅读(123)  评论(0编辑  收藏  举报