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.标记-清除算法
效率上:不高
空间上:内存碎片多
复制算法(可用新生代中from to)
分2块(a,b),用其中一块(a),用完后,进行垃圾回收,把活动对象复制到另一块(b),清理a
空间上:浪费空间
标记整理算法(老年代)
和标记清除的·标记过程一样,但后边不是直接回收,而是存货对象向前移动,再清除
分代收集算法
将内存分几块,一般将java堆分新生代和老年代,在结合上述算法,不同情况不同算法