《深入理解Java虚拟机》:垃圾收集器与内存分配策略( 三 )


初始标记、并发标记、重新标记、并发清除 。
由于整个过程耗时最长的并发标记和并发清除过程收集器线程都可以与用户线程一起工作 , 所以 , 整体而言 , CMS收集器的内存回收过程是与用户线程并发执行的 。
G1收集器:Garbage first垃圾收集器是目前垃圾收集器理论发展的最前沿成果 , 相比与CMS收集器 , G1收集器两个最突出的改进是:

  1. 基于标记-整理算法 , 不产生内存碎片 。
  2. 可以非常精确控制停顿时间 , 在不牺牲吞吐量前提下 , 实现低停顿垃圾回收 。
G1收集器避免全区域垃圾收集 , 它把堆内存划分为大小固定的几个独立区域 , 并且跟踪这些区域的垃圾收集进度 , 同时在后台维护一个优先级列表 , 每次根据所允许的收集时间 , 优先回收垃圾最多的区域 。 区域划分和优先级区域回收机制 , 确保G1收集器可以在有限时间获得最高的垃圾收集效率 。
内存分配jvm内存分配主要指堆内存分配 , 而且优先在Eden上分配 , 但是有以下三种情况 , 对象会进入老年代:
  1. 大对象直接进入老年代 , jvm提供了-XX:PretenureSizeThreshold参数 , 令大于这个设置值的对象直接在老年代分配;
  2. 长期存活的对象 , jvm提供了-XX:MaxTenuringThreshold参数 , 令大于这个设置值的对象从新生代晋升到老年代 , 这个参数因为是4bit , 最大值为15 , 所以说对象15次未死 , 将晋升老年代;
  3. surviver空间中相同年龄所有对象大小的总和大于surviver的一半 。
内容来源于《深入理解Java虚拟机》第三章 。
#程序员##JVM#


推荐阅读