写点什么

架构师训练营 W9 作业

用户头像
telliex
关注
发布于: 2020 年 08 月 05 日

1.请简述 JVM (Java Virtual Machine) 垃圾 GC (Garbage Collection) 回收原理

GC 机制对 JVM 中的记忆体进行标记,确定哪些记忆体需要回收,再根据回收策略,自动的回收记忆体。作法常是将物件设定为 null 或者呼叫 System.gc() 显式清理记忆体(耗效能)。其实無需特意清理,应由垃圾回收器自动进行清理。



GC垃圾回收器会在下面两种情况下启动

  1. 大多数物件会很快变得不可达。

  2. 只有很少的由老物件(建立时间较长的物件)指向新生物件的引用。 



Java 虚拟机器在物理上划分为两个逻辑记忆体代。新生代 (Young Generation) 和老年代 (Old Generation)。

新生代(Young Generation) - 一个 Eden ,两个 Survivor

  1. 绝大多数刚建立的物件会存放在 Eden。

  2. 在 Eden 执行了第一次 GC 之后,存活的物件被移动到其中一个 Survivor

  3. 此后,在 Eden 执行 GC ,存活的物件会被堆积在同一个 Survivor,直到满

  4. 将还存活的物件一到另一个 Survivor ,清除已满的 Survivor

  5. 重复几次依然存活的物件,就会被移动到老年代

使用“停止-复制”演算法进行记忆体清理。

老年代(Old Generation):

新生代中存活下来,会被拷贝到这里,其所占用的空间要比新生代多。当年老代记忆体不足时,将执行 Major GC,也叫 Full GC。

使用的演算法是标记-整理演算法

回收前,要先判断哪些对象已经“死去”,需要进行回收。



用户头像

telliex

关注

还未添加个人签名 2018.03.26 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 W9 作业