云南房产网站建设,著名设计网站deviantart的id模板,wordpress主题添加一个自定义页面,iis 搭建wordpress1、Young为年轻代出发的垃圾回收器。 2、Old为老触发的垃圾回收器。 3、连线代表的是垃圾回收器的组合。CMS 和Serial Old连线代表CMS一旦不行了#xff0c;Serial Old上场。 首先了解一个概念#xff1a;STW
1、什么是STW#xff1f; STW是Stop-The-World缩写: 是在垃圾回… 1、Young为年轻代出发的垃圾回收器。 2、Old为老触发的垃圾回收器。 3、连线代表的是垃圾回收器的组合。CMS 和Serial Old连线代表CMS一旦不行了Serial Old上场。 首先了解一个概念STW
1、什么是STW STW是Stop-The-World缩写: 是在垃圾回收算法执⾏过程当中将JVM内存冻结丶应用程序停顿的⼀种状态。
1、在STW 状态下JAVA的所有线程都是停⽌执⾏的 - GC线程除外 2、一旦Stop-the-world发生除了GC所需的线程外其他线程都将停止工作中断了的线程直到GC任务结束才继续它们的任务。 3、STW是不可避免的,垃圾回收算法执⾏一定会出现STW,我们要做的只是减少停顿的时间 GC各种算法优化的重点就是减少STW(暂停)同时这也是JVM调优的重点。
2、什么时候进入STW状态? 可达性分析算法中枚举根节点GC Roots会导致所有Java执行线程停顿,进入STW状态
3、为什么一定要STW停顿的原因? 1、分析工作必须在一个能确保一致性的快照中进行 2、一致性指整个分析期间整个执行系统看起来像被冻结在某个时间点上 3、如果出现分析过程中对象引用关系还在不断变化则分析结果的准确性无法保证 4、被STW中断的应用程序线程会在完成GC之后恢复频繁的中断会让用户感觉卡顿 5、所以我们要减少STW的发生,也就相当于要想办法降低GC垃圾回收的频率 6、STW状态和采用哪款GC收集器无关所有的GC收集器都有这个状态,因为要保证一致性。 7、但是好的GC收集器可以减少停顿的时间、减少STW(暂停)和降低GC垃圾回收的频率是调优的重点 如果系统卡顿很明显,大概率就是频繁执行GC垃圾回收,频繁进入STW状态产生停顿的缘故 记住目前所有垃圾收集器都会进入STW机制 一、Serial收集器单线程收集器新时代采用复制算法
这个收集器是一个单线程的收集器但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作会进行SWT停掉除了GC线程之外的所有的工作线程直到它收集结束才继续执行其它的工作线程。 例当一个小孩在房间玩乱丢垃圾这时他妈妈进来收拾垃圾了会把小孩抱到一边不让他玩先等收拾好垃圾在让他玩。 二、Serial Old收集器单线程收集器老年代采用标记清除/压缩算法
Serial Old是Serial收集器的老年代版本它同样是一个单线程收集器。会进行SWT停掉除了GC线程之外的所有的工作线程直到它收集结束才继续执行其它的工作线程。
三、Parallel Scavenge收集器(多线程收集器新生代、采用复制算法)
Parallel Scavenge 收集器也是一款新生代收集器它同样是基于标记 -复制算法实现的收集器是 能够并行收集的多线程收集器。
Parallel Scavenge收集器的特点是它的关注点与其他收集器不同。Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量Throughput。所谓吞吐量就是处理器用于运行用户代码的时间与处理器总消耗时间的比值即 举例说明 如果虚拟机完成某个任务用户代码加上垃圾收集总共耗费了 100 分钟其中垃圾收集花掉 1 分 钟那吞吐量就是 99% 。 Parallel Scavenge收集器也经常被称作“吞吐量优先收集器”。 如果在上线之前没有做任何JVM调优或设置话默认的就是Parallel Scavenge Paraller Old组合垃圾回收器简称PS PO 四、Paraller Old收集器多线程收集器老年代采用标记整理算法
Parallel Old是Parallel Scavenge收集器的老年代版本
五、ParNew收集器多线程收集器新时代采用标记-整理算法
ParNew说白了和Parallel Scavenge一样的区别组了做了增强以便能让它和CMS配合使用。 六、CMS收集器多线程收集器老年代采用标记—清除算法
CMSConcurrent Mark Sweep收集器是一种以获取最短回收停顿时间为目标的收集器
从名字包含“Mark Sweep”上就可以看出CMS收集器是基于“标记—清除”算法实现的它的运作过程相对于前面几种收集器来说更复杂一些整个过程分为4个步骤包括
初始标记CMS initial mark 并发标记CMS concurrent mark 重新标记CMS remark 并发清除CMS concurrent sweep 1、初始标记触发STW初始标记仅仅只是标记一下GC Roots能直接关联到的对象速度很快。
2、并发标记不触发STW并发标记阶段就是从GC Roots的直接关联对象开始遍历整个对象图的过程 这个过程耗时较长但是不需要停顿用户线程 可以与垃圾收集线程一起并发运行。因为用户程序继续运行可能会有导致已经标记过的对象状态发生改变。所以要进行一次重新标记。
3、重新标记触发STW重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录就是并发标记过程中产生的新垃圾进行标记或者到重新标记这一阶段又要用到并发标记已经标记的垃圾取消垃圾标记。 这个阶段的停顿时间一般会比初始标记阶段的时间稍长远远比并发标记阶段时间短。
4、并发清理不触发STW 开启用户线程同时GC线程开始对未标记的区域做清扫。这个阶段如果有新增对象会被标记为黑色不做任何处理等下次重新触发在进行处理。
CMS问题