各种垃圾回收器、对象分配内存原则、GC参数

首先谈谈对象内存分配原则:
1.大对象或数组直接分配到老生代
2.对于一般而言的对象优先分配到Eden区域
3.长期存活的对象进入老年代(每新生代GC一次(Minor GC/GC),对象就年龄就增加一岁,直到达到预设的age,然后就移动到老年代。)
4.动态年龄规划,通过动态计算,将其移动到老生代。

垃圾回收器的种类以及实现方式(主要学习下被人解决问题的思路,核心就是用多线程、单线程来完成垃圾回收,以及cpu的时间片占用。)
1.Serial:采取复制算法。单线程收集器。用在新生代。
2.Serial old:单线程收集器,采取标记-整理算法。用在老年代。
3.ParNew:Serial的多线程版本,采取的复制算法。用在新生代。
4.Parallel Scavenge:与ParNew类似,但是关注的是吞吐量。在这里指的是CPU运行用户代码耗时/CPU总的耗时。CPU总耗时可以简化归纳为:用户代码耗时+垃圾回收耗时。
      通过配置达到-XX:MaxGCPauseMillis来设置垃圾回收的最大停顿时间;通过配置-XX:GCTimeRatio来设置吞吐率。
5.Parallel Old:是Parallel Scavenage老年代版本。
6.CMS:多线程的一个垃圾回收器,关注老年代。
  主要分为以下几个步骤:初始标记-标记GC ROOTS直接关联到的对象。独占运行,用户线程停止。
         并发标记-通过GC ROOTS TRANCE的过程,这个时候是和用户线程一起运行。
         重新标记-将并发标记期间用户线程产生的新的无用对象标记上。
         并发清理-清理标记过的数据
         并发重置-重置CMS的数据结构,等待发起下一次GC。
  缺点:采用标记-清理算法,容易产生大量碎片。
     对CPU资源敏感。i-CMS的策略是采取抢占来放小该问题。
     对并发清理期间产生的垃圾只能留到下一次FULL GC,这部分时间片中内存产生的垃圾叫‘浮动垃圾’。
7.G1:采取标记-整理算法。
按照收集区域划分
新生代:Serial、ParNew、Parallel Scavenge
老年代:CMS、Parallel Old、Serial Old
跨年代的收集器:G1

各种垃圾回收器搭配使用情况:
Serial+Serial old 、 Serial+CMS、
Parallel+parallel Scavenge、Parallel Scavenge+Serial old、
ParNew+CMS、ParNew+Parallel Old
另外老年代配合协同使用的是:CMS + Serial old。原因在于CMS要是在预留内存不足的时候就会“CURRENT MODEL FAILUER”,就会寻求Serial old来一次Full GC。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值