网站建设捌金手指花总十六,wordpress添加主题,免费建设网站哪个好,企业网站如何找词一文带你深入JAVA GC#xff08;垃圾回收机制#xff09;面试讲解#xff01;#xff01;#xff01; - 知乎
gc常用算法
gc常用算法有#xff1a;标记-清除算法#xff0c;标记-压缩算法#xff0c;复制算法#xff0c;分代收集算法。
复制算法#xff08;Java中…一文带你深入JAVA GC垃圾回收机制面试讲解 - 知乎
gc常用算法
gc常用算法有标记-清除算法标记-压缩算法复制算法分代收集算法。
复制算法Java中新生代采用
缺点:
复制算法的代价是将系统内存折半一般情况下很难让人接受。对于存活对象较多的情况效率不能保证
标记清除法Mark-Sweep
缺点
标记清除算法回收后的控件时不连续的会产生空间碎片在对象的堆空间分配过程中尤其是大对象的分配不连续内存空间的工作效率要低于连续的空间。
目前主流的JVMHotSpot采用的是分代收集算法。
gc的对象
需要进行回收的对象就是已经没有存活的对象判断一个对象是否存活常用的有两种办法引用计数和可达分析。
1引用计数每个对象有一个引用计数属性新增一个引用时计数加1引用释放时计数减1计数为0时可以回收。此方法简单无法解决对象相互循环引用的问题。
2可达性分析Reachability Analysis从gc roots开始向下搜索搜索所走过的路径称为引用链。当一个对象到gc roots没有任何引用链相连时则证明此对象是不可用的。不可达对象。
标记压缩清除法Java中老年代采用
分为三个阶段标记阶段压缩阶段清除阶段
标记阶段和清除阶段不变只不过增加了一个压缩阶段就是在做完标记阶段后 将这些标记过的对象集中放到一起确定开始和结束地址比如全部放到开始处这样再去清除将不会产生磁盘碎片。
压缩阶段占用了系统的消耗并且如果标记对象过多的话损耗可能会很大在标记对象相对较少的时候效率较高。 gc在什么时候对什么东西做了什么事情。
在什么时候
程序员不能具体控制时间系统在不可预测的时间调用System.gc()函数的时候
对什么东西
从GC Roots搜索不到而且经历过一次标记清理之后仍然没有复活的对象。
GC Roots都有哪些
1.虚拟机栈中的引用的对象
2.方法区中静态属性引用的对象
3.常量引用的对象
4.本地方法栈中JNI(即一般说的native方法引用的对象
做什么
新生代复制清理
老年代标记-清除和标记-压缩算法
永久代存放Java中的类和加载类的类加载器本身
Major GC 是清理老年代。Full GC 是清理整个堆空间—包括年轻代和老年代。