Java虚拟机知识点【GC】

2019-07-26  本文已影响0人  O_Neal

一、垃圾收集算法

  1. 标记-清除算法
      首先标记出所有需要回收的对象,然后统一回收所有被标记的对象。该算法的效率不高,而且存在内存碎片的问题。

  2. 复制算法
      将内存按容量划分为大小相等的两块,每次只使用其中一块进行内存分配,当这块内存用完了,就将还存活的对象全部复制到另一块内存,然后把使用过的内存空间一次清理掉。该算法能解决标记清除算法的效率问题。但是因为需要将内存分一半,代价更高。

  3. 标记-整理算法
      标记出所有需要回收的对象,让存活的对象向一端移动,然后直接清理掉端边界以外的内存。该算法能解决标记清除算法的内存碎片问题,以及复制算法在对象存活率高时,进行多次复制的效率变低的问题。

  4. 分代收集算法
      新生代中,每次垃圾收集时都有大批对象死去,只有少量存活,此时就得使用复制算法,这样只要付出少量存活对象的复制成本就可以完成收集;
      老年代中,对象成活率高、没有额外空间对他进行分配担保,就得使用标记清理或标记整理算法;
      分代收集算法将堆空间划分为年轻代yang与老年代old,年轻代又被分为Eden区和Survivor区,Survivor区又被分为From区与To区。 默认按8:1划分Eden区和Survivor区。Eden区是连续的内存空间,因此在Eden区分配内存极快。HotSpot虚拟机使用指针碰撞和TLAB来加快Eden区的内存分配,并保障线程安全。

    分代收集算法的内存划分

分代收集算法的执行流程

  1. 新建的对象优先分配在Eden区;
  2. 当Eden区满了,就会触发Minor GC,Eden中的存活对象被移动到Survivor0,Eden被清空;
  3. 等Eden区再满了,再次触发Minor GC,Eden和Survivor0中的存活对象又会被复制到Survivor1,S0和Eden被清空,然后下一轮S0与S1交换角色,如此循环往复。
  4. 当两个Survivor区切换了几次(HotSpot虚拟机默认15次)之后,仍然存活的对象,将被复制到老年代。

Minor GC:发生在新生代的GC,因为Java对象都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。
Major GC/Full GC:发生在老年代年的GC,出现Full GC经常伴随至少一次的Minor GC(非绝对,如Parallel Scavenge)。Full GC的速度一般会比Minor GC慢10倍以上,所以要合理设置年轻代与老年代的大小,尽量减少Full GC的操作。

Minor GC的触发条件:
Full GC的触发条件:

二、内存分配和回收策略

三、垃圾收集器

  1. Serial:单线程的收集器。==复制算法==
  2. ParNew:Serial 收集器的多线程版本。==复制算法==
  3. Parallel Scavenge:类似ParNew的收集器,其他收集器关注于尽可能缩短 Stop The World 的时间, 而Parallel 收集器更关注系统的吞吐量,支持自适应调节策略。==复制算法==
  4. Serial Old:Serial 收集器的老年代版本。==标记整理算法==
  5. Parallel Old:Parallel Scavenge 收集器的老年代版本。==标记整理算法==
  6. CMS:Concurrent Mark Sweep 收集器是一种以获取最短回收停顿时间为目标的收集器。==标记清除算法==

 CMS 的运作过程

初始标记 并发标记 并发清除

 CMS 的整体流程

CMS收集器

 CMS 的缺点

  1. G1:面向服务端应用。

 G1 的特点

 G1 的运作过程

  1. ZGC:JDK 11 引入的,号称具有更低延迟的垃圾收集器,利用有色指针、加载屏障等技术,将 STW 控制在一次,只做一次扫描就能实现垃圾收集。

四、垃圾收集器的组合方式

参数 功能
-XX:+UseConcMarkSweepGC 自动启用-XX:+UseParNewGC
-XX:+UseParallelGC 自动启用-XX:+UseParallelOldGC。Server模式下的默认值。
-XX:+UseParallelOldGC 自动启用-XX:+UseParallelGC
-XX:+UseParNewGC JDK8不能单独启用
-XX:+UseSerialGC Serial + Serial Old。Client模式下的默认值。
-XX:+UseG1GC 使用G1垃圾收集器

参考资料:《深入理解Java虚拟机(第二版)》、《Java虚拟机规范(Java SE 8版)》、GC Algorithms: Implementations

上一篇下一篇

猜你喜欢

热点阅读