gc算法和垃圾收集算法

1.引用计数法(已经不用)

     给对象加一个引用计数器,每当有一个地方引用,计数器加一,当引用失效,计数器就减一,任何时候计数器为0的对象就不可能在被使用

2.可达性分析算法

以“gc roots”为起点,向下搜索,节点走过的路径为引用链,任何一个对象到gc roots没有任何引用链就不可用,即回收

gc roots:类加载器,thread,虚拟机的本地变量表,static,常量,本地方法栈的变量等等

注:四种引用和垃圾回收两种标记(finalize())

知道大概可参考https://blog.****.net/tony_java_2017/article/details/80685148

废弃常量:当前没有任何String对象引用常量池中的字符串常量

无用类(可以回收不一定回收):(1)该类所有实例被回收

(2)该类的ClassLoader已回收

(3)该类的java.lang.Class对象没有任何地方被引用

 垃圾收集算法

1.标记-清除算法

效率上:不高

空间上:内存碎片多

gc算法和垃圾收集算法

复制算法(可用新生代中from   to)

分2块(a,b),用其中一块(a),用完后,进行垃圾回收,把活动对象复制到另一块(b),清理a

空间上:浪费空间

gc算法和垃圾收集算法

标记整理算法(老年代)

和标记清除的·标记过程一样,但后边不是直接回收,而是存货对象向前移动,再清除

gc算法和垃圾收集算法

分代收集算法

将内存分几块,一般将java堆分新生代和老年代,在结合上述算法,不同情况不同算法