G1收集器

#G1收集器 [toc]

1. 简单可行的性能调优

-XX:+UseG1GC -Xmx32g -XX:MaxGCPauseMillis=200

-XX:+UseG1GC为开启G1垃圾收集器, -Xmx32g 设计堆内存的最大内存为32G, -XX:MaxGCPauseMillis=200设置GC的最大暂停时间为200ms。 如果我们需要调优,在内存大小一定的情况下,我们只需要修改最大暂停时间即可。

2. G1将新生代,老年代的物理空间划分取消了。

我们再也不用单独的空间对每个代进行设置了,不用担心每个代内存是否足够。

G1算法将堆划分为若干个区域(Region),它仍然属于分代收集器。

新生代处理():在堆中的某些去为新生代,新生代的垃圾收集依然采用暂停所有应用线程的方式,将存活对象拷贝到老年代或者Survivor空间。 老年代处理:老年代也分成很多区域,G1收集器通过将对象从一个区域复制到另外一个区域,完成了清理工作。

Humongous: 如果一个对象占用的空间超过了分区容量50%以上,G1收集器就认为这是一个巨型对象。这些巨型对象,默认直接会被分配在年老代,但是如果它是一个短期存在的巨型对象,就会对垃圾收集器造成负面影响。为了解决这个问题,G1划分了一个Humongous区,它用来专门存放巨型对象。如果一个H区装不下一个巨型对象,那么G1会寻找连续的H分区来存储。为了能找到连续的H区,有时候不得不启动Full GC。

对象分配策略

  1. TLAB(Thread Local Allocation Buffer)线程本地分配缓冲区 为了使对象尽可能快的分配出来。如果对象在一个共享的空间中分配,我们需要采用一些同步机制来管理这些空间内的空闲空间指针。 在Eden空间中,每一个线程都有一个固定的分区用于分配对象,即一个TLAB。分配对象时,线程之间不再需要进行任何的同步。

  2. Eden区中分配

  3. Humongous区分配

这就意味着,在正常的处理过程中,G1完成了堆的压缩(至少是部分堆的压缩),这样也就不会有cms内存碎片问题的存在了。

转载于:https://my.oschina.net/dylw/blog/994712

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值