整理知识后的小总结

171 阅读4分钟

整理面试题的知识之后 那么多的知识,肯定很难记住,而且也没有必要每个知识点都记住,这样效率也不高 我认为应该在最后,自己写一个总结

如果面试中遇到了这道题,我必须答出来的点 在这个过程中,有如下作用 (1)强制自己思考知识点的重要性 (2)答题的顺序 这对强化自己对整个知识结构的理解也是非常重要的

G1垃圾回收器

区域化分代式垃圾回收器 Garbage First G1

为什么叫做Garbage First(G1)呢

  • 因为G1是一个并行的垃圾回收器,它把堆内存分割成为很多区域(Region)。使用不同的Region来表示Eden、s1、s0以及老年代
  • G1的理念:(1)避免全区域的垃圾收集;(2)优先收集有回收价值最大的垃圾
  • 所以叫垃圾优先Garbage First

G1垃圾回收器的优点

  1. 并行与并发
  • 并行性:G1在回收期间,可以有多个GC线程同时工作,有效利用多核计算能力,此时用户线程STW
  • 并发性:G1拥有与应用程序线程交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况
  1. 分代收集
  • 从分代上看,G1仍然属于分代型垃圾回收器,他会区分年轻代和老年代,年轻代依然有Eden区和Survivor区。但从堆的结果来看,他不要求整个Eden区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量。乐高积木
  • 将堆空间划分为若干个区域(Region),这些区域中包含了逻辑上的年轻代和老年代
  • 和之前的各类回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,或者工作在年轻代,或者工作在老年代
  1. 空间整合
  • CMS:”标记-清除“算法、内存碎片、若干次GC后进行一次碎片整理
  • G1将内存划分为一个个Region。内存的回收式以Region作为基本单位的。Region之间是复制算法,但是整体上可以看作是标记-压缩(Mark-Compact)算法,两种算法都可以避免内存碎片。这种特性有利于程序的长时间运行,分配大对象时不会因为无法找到连续空间而提前触发下一次GC。尤其是当Java堆非常大的时候,G1的优势更加明显
  1. 可预测的停顿时间
  • 这是G1相对于CMS的另一大优势,G1除了追求低停顿外,还能建立可预测的停顿的停顿时间模型,能让使用者明确指定一个长度在M毫秒的时间片段内,消耗在垃圾收集上的时间不能超过N毫秒
    • 由于分区的原因,G1可以只选取部分区域进行内存回收,这样缩小了回收的范围,因此对于全局停顿情况的发生可以的到较好的控制
    • G1跟踪各个Region里面的垃圾堆积的价值大小(回收所获得的空间大小以及回收所需要的时间的经验值),在后台维护了一个优先列表,每次根据允许的收集时间,优先回收价值最大的Region。保证了G1收集器在有限时间内可以获取尽可能高的收集效率

G1与CMS的比较

面试中问到G1的时候,我需要回答出来的关键点:

  1. G1和其他垃圾回收器最大的不同:G1是分区,传统的是分代
  2. 各个区域可以是Eden、s1、s0,也可以是老年代
  3. 各个分区不一定是物理上连续的,他们可以是逻辑上连续的
  4. G1会维护一个优先级列表,垃圾回收的时候会优先回收哪些回收价值最大的垃圾
  5. 可以在用户设置的期望时间间隔内,尽可能的完成垃圾收集