java垃圾回收解剖

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q54244125/article/details/80316824

开门见山,直接奔入主题。。。

java的垃圾回收主要分为以下几种:

    一、 引用计数法。

    二、 标记清除算法。

    三、 复制算法。

    四、 标记压缩算法。

    五、 。。。。


1. 引用计数算法

问:什么是引用计数算法

        引用计数算法,顾名思义,假设有个对象,内部有个计算数量的属性,当其他地方使用,则数量+1,当引用消失时,则数量-1。最后根据计算数量的属性来是否为0来判断是否进行回收。当为0则回收,反之则不。

问:引用 计数算法的缺点

       当两个未被使用到的对象其内部相互引用时(A对象存在B的引用,而B对象又存在A的引用)此时数量都不为0,导致计数不准确,不能及时的释放资源。故此算法一般不被使用。

2. 标记清除算法

问: 什么是标记清除算法?

        标记清除算法,则是根据对象的根节点,以根节点为起点,标记可到达的对象,那些未被标示的对象,则视为可被回收的对象,将会在下一次GC时回收。

缺点:

        标记清除算法由于回收时,不能压缩对象的内存地址,导致内存的不连续性。性能将下降。

3. 复制算法

问:什么是复制算法

        复制算法就是将一块内存空间,平均的切分两份,假设A目前是运行状态,B处于空闲状态,那么下一次回收两者的角色互换,A变成空闲状态,B变成运行状态。将A中存活的对象复制到B中,然后清空A。。来回切换,达到回收效果。

缺点:

        复制算法会造成一半的内存的浪费。在hot spot中该算法用于新生代的GC回收(form区域和to区域内存大小等比划分),由于新生代的GC会淘汰大部分的对象。新生代中的对象可以用朝生夕死来形容。假设form为运行区域,to为空闲,那么在下一次发生GC时,form中的存活对象将复制到to中(当to的空间到达100%)则对象直接进入到老年代。


未完。。。。待续。。。。

猜你喜欢

转载自blog.csdn.net/q54244125/article/details/80316824