欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

标记出GC Root可达对 昆山软件定制开发 象衍生出去的存活对象

点击: 次  来源:劳务派遣管理系统 时间:2018-01-16

原文出处: 占小狼

为办理CMS算法发生空间碎片和其它一系列的问题缺陷,HotSpot提供了别的一种垃圾接纳计策,G1(Garbage First)算法,通过参数-XX:+UseG1GC来启用,该算法在JDK 7u4版本被正式推出,官网对此描写如下:

The Garbage-First (G1) collector is a server-style garbage collector, targeted for multi-processor machines with large memories. It meets garbage collection (GC) pause time goals with a high probability, while achieving high throughput. The G1 garbage collector is fully supported in Oracle JDK 7 update 4 and later releases. The G1 collector is designed for applications that:

  • Can operate concurrently with applications threads like the CMS collector.
  • Compact free space without lengthy GC induced pause times.
  • Need more predictable GC pause durations.
  • Do not want to sacrifice a lot of throughput performance.
  • Do not require a much larger Java heap.
  • G1垃圾收集算法主要应用在多CPU大内存的处事中,在满意高吞吐量的同时,竟大概的满意垃圾接纳时的暂停时间,该设计主要针对如下应用场景:

  • 垃圾收集线程和应用线程并发执行,和CMS一样
  • 空闲内存压缩时制止冗长的暂停时间
  • 应用需要更多可预测的GC暂停时间
  • 不但愿牺牲太多的吞吐机能
  • 不需要很大的Java堆 (翻译的有点虚,多大才算大?)
  • 堆内存布局

    1、以往的垃圾接纳算法,如CMS,利用的堆内存布局如下:

    标志出GC Root可达对 昆山软件定制开拓 象衍生出去的存活工具
  • 新生代:eden space + 2个survivor
  • 暮年月:old space
  • 耐久代:1.8之前的perm space
  • 元空间:1.8之后的metaspace
  • 这些space必需是地点持续的空间。

    2、在G1算法中,回收了别的一种完全差异的方法组织堆内存,堆内存被分别为多个巨细相等的内存块(Region),每个Region是逻辑持续的一段内存,布局如下:

    标志出GC Root可达对 昆山软件定制开拓 象衍生出去的存活工具

    每个Region被标志了E、S、O和H,说明每个Region在运行时都充当了一种脚色,个中H是以往算法中没有的,它代表Humongous,昆山软件开发,这暗示这些Region存储的是巨型工具(humongous object,H-obj),当新建工具巨细高出Region巨细一半时,直接在新的一个或多个持续Region中分派,并标志为H。

    Region

    堆内存中一个Region的巨细可以通过-XX:G1HeapRegionSize参数指定,巨细区间只能是1M、2M、4M、8M、16M和32M,总之是2的幂次方,假如G1HeapRegionSize为默认值,则在堆初始化时计较Region的实践巨细,详细实现如下:

    标志出GC Root可达对 昆山软件定制开拓 象衍生出去的存活工具

    默认把堆内存凭据2048份均分,最后获得一个公道的巨细。

    GC模式

    G1中提供了三种模式垃圾接纳模式,young gc、mixed gc 和 full gc,在差异的条件下被触发。

    young gc

    产生在年青代的GC算法,一般工具(除了巨型工具)都是在eden region中分派内存,当所有eden region被耗尽无法申请内存时,就会触发一次young gc,劳务派遣管理系统,这种触发机制和之前的young gc差不多,执行完一次young gc,活泼工具会被拷贝到survivor region可能提升到old region中,空闲的region会被放入空闲列表中,期待下次被利用。

    参数 寄义
    -XX:MaxGCPauseMillis 配置G1收集进程方针时间,默认值200ms
    -XX:G1NewSizePercent 新生代最小值,默认值5%
    -XX:G1MaxNewSizePercent 新生代最大值,默认值60%

    mixed gc

    当越来越多的工具提升到暮年月old region时,为了制止堆内存被耗尽,虚拟时机触发一个殽杂的垃圾收集器,即mixed gc,昆山软件公司,该算法并不是一个old gc,除了接纳整个young region,还会接纳一部门的old region,这里需要留意:是一部门暮年月,而不是全部暮年月,可以选择哪些old region举办收集,从而可以对垃圾接纳的耗时时间举办节制。

    那么mixed gc什么时候被触发?

    先回首一下cms的触发机制,假如添加了以下参数:

    -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly