zoukankan      html  css  js  c++  java
  • 垃圾回收

    4.2 复制算法

    复制算法的思想是,把内存分成两块,假设分成A、B两个区域吧。

    每次对象过来之后,都放到A区域里,当A区域满了之后,把存活的对象复制到B区域,然后清空A区域。

    接下来的对象就全部放到B区域,等B区域满了,就把存活对象复制到A区域,然后清空B区域。

    就这样来回倒腾,完成垃圾回收。

    优点是不会有空间碎片,缺点是每次只用得到一半内存。

    缺点是在对象存活率较高的场景下(比如老年代那样的环境),需要复制的东西太多,效率会下降。

      1. GC 是什么? 为什么要有 GC?
        GC就是垃圾回收,释放掉没用的对象占用的空间,保证内存空间不被迅速耗尽。
      2. 简单说一下java的垃圾回收机制。
        java采用分代回收,分为年轻代、老年代、永久代。年轻代又分为E区、S1区、S2区。
        到jdk1.8,永久代被元空间取代了。
        年轻代都使用复制算法,老年代的收集算法看具体用什么收集器。默认是PS收集器,采用标记-整理算法。
      3. JVM的常见垃圾回收算法有哪些?
        复制、标记清除、标记整理、分代回收
      4. 为什么要使用分代回收机制?
        因为没有一种算法能适用所有场合。在对象存活率低的场景下,复制算法最合适。
        对象存活率高时,标记清除或者标记整理算法最合适。
        所以才需要分代来处理。
      5. 如何判断一个对象是否存活?
        现在主流使用的都是可达性分析法。从GC Roots对象计算引用链,能链上的就是存活的。
      6. 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
        不会。对象回收需要一个过程,这个过程中对象还能复活。而且垃圾回收具有不确定性,指不定什么时候开始回收。
  • 相关阅读:
    JZOJ5906 传送门
    JZOJ5907 轻功
    JZOJ5904 刺客信条
    JZOJ5347 遥远的金字塔
    JZOJ5344 摘果子
    JZOJ4742 单峰
    JZOJ4725 质数序列
    JZOJ2499 东风谷早苗
    JZOJ4737 金色丝线将瞬间一分为二
    最后的财产——模板大全
  • 原文地址:https://www.cnblogs.com/chenminghui/p/13389212.html
Copyright © 2011-2022 走看看