• 9、Gc(复制算法)


    Gc(复制算法)

    1. 首先理解谁是from,谁是to区。他们是一个动态的概念(谁空谁是to(他们的空间位置并未改变。只是在装取数据后,名称会动态改变,to区永远是空的))
    2. 每次gc都会将Eden区中活的对象移到幸存区中(首先Eden一旦被轻gc那么这个Eden就会是空的(垃圾被回收了,活的对象被移动到幸存者区了))
    3. 假如最开始上面为from区,下面为to区。Gc后发现to区有空间可以存放活的对象1,那么就将对象1放进to区了。而这时from和to区的名称就发生改变了。上面from为空的嘛。所以这个装对象的to就变为from区咯。(他们在不断的转换)。

     

     

    1. 思考一个场景二:其中的to和from都有一个对象了,但是我们必须保证一个空的to区,那么就随意去复制to或from的对象。那么一个就为2一个为空,那么空的就为to区了,2的为from区。

     

     

    (默认)一个对象经历了15次Gc还存活的话就会进入老年区(也是可以调节次数的)

     

    新生代(主要使用的就是复制算法(就是我们上面说的from/to区的复制))

     

    第一步:场景to区为空,from有一个对象。Eden有活的对象那么首先会进入其to区(其中from的对象也会进入to区)

     

    第二步:(Eden活对象进入to区,下面from区对象也进入to区,这是to区就变为from区咯,from变为空的to区了)(每次gc,其中的Eden和To区都是空的)

     

    第三步:多次gc后超过15次还存活那么就进入老年区了,未存活就gc

     

    *好处:没有没有内存碎片

    *坏处:浪费了内存空间(一个to区永远是空的)假若所有的对象100%存活的话(极端情况就出现弊端了(都要去复制一次))

    复制算法的最佳使用场景就是:对象存活度比较低(新生区咯(基本99%都活不到老年区))

  • 相关阅读:
    JAVA餐饮掌上设备点餐系统计算机毕业设计Mybatis+系统+数据库+调试部署
    Lua脚本详解
    RKMPP库快速上手--(三)MPP解码入门
    android之TextView自由选择复制
    NRF52840-QIAA-R Nordic BLE5.0蓝牙无线收发芯片
    Nodejs-1
    乘方【NOIP 2022 普及组】
    More effective C++:条款3.绝对不要以多态方式处理数组及条款4:非必要不提供default construcor
    【CSS 中 link 和@import 的区别】
    Windows 电脑查看 WiFi 密码的方法都有哪些?
  • 原文地址:https://blog.csdn.net/logtcm4/article/details/127762451