CMS收集器: 1 是一种以获取最短回收停顿时间为目标的收集器。 2 基于“标记-清除”算法实现 3 运作过程如下 1)初始标记 2)并发标记 3)重新标记 4)并发清除 初始标记、从新标记这两个步骤仍然需要“stop the world”。初始标记很快。 4 CMS优缺点 主要优点:并发收集、低停顿。 主要缺点: 1)CMS收集器对CPU资源非常敏感。在并发阶段,它虽然不会导致用户线程停顿,但是会因为占用了一部分线程而导致应用程序变慢,总吞吐量会降低。 2)CMS收集器无法处理浮动垃圾,可能会出现“Concurrent Mode Failure(并发模式故障)”失败而导致Full GC产生。 浮动垃圾:由于CMS并发清理阶段用户线程还在运行着,伴随着程序运行自然就会有新的垃圾不断产生,这部分垃圾出现的标记过程之后,CMS无法在当次收集中处理掉它们,只好留待下一次GC中再清理。这些垃圾就是“浮动垃圾” 3)CMS是一款“标记--清除”算法实现的收集器,容易出现大量空间碎片。当空间碎片过多,将会给大对象分配带来很大的麻烦,往往会出现老年代还有很大空间剩余,但是无法找到足够大的连续空间来分配当前对象,不得不提前触发一次Full GC。 |
G1收集器 1 G1是一款面向服务端应用的垃圾收集器。 2 G1具备如下特点: 1) 并行于并发:G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短stop-The-World停顿时间。部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行。 2) 分代收集:虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念。它能够采用不同的方式去处理新创建的对象和已经存活了一段时间,熬过多次GC的旧对象以获取更好的收集效果。 3) 空间整合:与CMS的“标记--清理”算法不同,G1从整体来看是基于“标记整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。 4) 可预测的停顿:这是G1相对于CMS的另一个大优势,降低停顿时间是G1和CMS共同的关注点,但G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内, 5) G1运作步骤:
初始标记--> 并发标记--> 最终标记-->筛选回收 初始标记:仅标记一下GC Roots能直接关联到的对象,这一阶段需要停顿线程,但是耗时很短, 并发标记:从GC Root开始对堆中对象进行可达性分析,找出存活的对象,这阶段时耗时较长,但可与用户程序并发执行。 最终标记:为了修正在并发标记期间因用户程序继续运作而导致标记产生变动的那一部分标记记录,这一阶段需要停顿线程,但是可并行执行。 筛选回收:首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划。 |
来源
http://blog.csdn.net/linhu007/article/details/48897597
相关推荐
CMS收集器以最小化应用程序停顿时间为目标,适用于对响应时间要求严格的互联网或B/S系统服务端。它采用“标记-清除”算法,这个算法分为四个阶段:初始标记、并发标记、重新标记和并发清除。在并发标记和并发清除...
G1垃圾收集器是Java 7中引入的一种低停顿时间垃圾收集器,适用于具有大内存和高性能要求的应用程序。G1垃圾收集器使用多个线程来进行垃圾收集工作,并具有较高的垃圾收集性能和较低的停顿时间。 选择合适的垃圾收集...
《CMS到G1的转变:理解G1垃圾收集器的工作原理》 CMS(Concurrent Mark Sweep)垃圾收集器曾是Java HotSpot VM的主流选择,然而随着内存规模的扩大和对软实时性能需求的增长,G1(Garbage-First)垃圾收集器逐渐...
### CMS收集器与G1收集器的比较 CMS(Concurrent Mark Sweep)收集器是一种并发的垃圾回收器,主要特点是尽可能减少Stop-the-World(STW)事件。然而,CMS在某些阶段仍然需要STW,比如初始标记和最终标记阶段。CMS...
CMS使用并发标记清除算法,允许在垃圾回收过程中用户线程与垃圾收集线程同时运行,减少了STW(Stop The World)事件的影响。 首先,CMS的五个主要阶段包括: 1. **初始标记**:这是一个STW阶段,快速标记GC Roots...
最后,JVM中提供了多种垃圾收集器,如Serial、Parallel、CMS、G1等,每种收集器都有其适用的场景和特点。例如,Serial收集器是单线程的,适用于小内存环境;而CMS(Concurrent Mark Sweep)收集器是追求低停顿时间的...
### 性能工程师指南:玩转OpenJDK HotSpot垃圾收集器 #### 一、性能工程概述 在软件开发过程中,性能工程是一个重要的环节,它不仅涵盖了对软件性能的需求定义与测试计划制定,还包括了软件的开发、实施及后续的...
了解这些垃圾收集器后,开发者可以根据应用需求选择合适的组合,如使用ParNew与CMS搭配,或者在需要低延迟时选用G1或ZGC。此外,调整JVM参数也是优化性能的关键,例如设置新生代与老年代的比例、设置并行线程数等。 ...
- **并发收集器**:如CMS(Concurrent Mark Sweep)和G1(Garbage-First),在应用程序运行的同时进行垃圾收集,减少停顿时间,适合对响应时间有高要求的应用。 此外,Java 9以后引入了更为先进的垃圾收集器,如ZGC...
- 包括Serial、ParNew、Parallel Scavenge、CMS(Concurrent Mark Sweep)、G1(Garbage-First)等,每种收集器都有其特定的优化目标和使用场景。 10. **性能优化**: - 选择合适的垃圾收集器组合,调整JVM参数,...
G1垃圾收集器是Java 7引入的一个重要特性,自那时起,它在JDK 7及更高版本中可用,并逐渐成为替代CMS垃圾收集器的优选方案。G1的主要创新在于其将堆空间划分为多个独立的区域(Region),这种设计使得G1能够更智能地...
1.6G1收集器 第六节:JVM参数调优 1.1 JVM重要参数介绍 1.2JVM参数调优 1.3JVM参数设置思路1.4JVM调优常用指令说明 第七节:JVM项目实战 1.1案例背景 1.2排查步骤 1.3.arthas 1.3.1.arthas简介 1.3.2.arthas...
GC)日志的开源工具,源自Tagtraum Industries的项目,并且在原作者停止开发后由其他人接手并继续更新,以支持Sun/Oracle Java 1.6及更高版本的垃圾收集器日志,包括G1收集器。这个工具对于Java开发者来说极其重要...
2. 对于大型应用程序,使用CMS垃圾收集器或G1垃圾收集器。 3. 对于需要低延迟的应用程序,使用Z垃圾收集器。 4. 使用 `-Xmx`和 `-Xms`选项来调整Java堆的大小。 5. 使用 `-XX:NewSize`和 `-XX:MaxNewSize`选项来调整...
了解和掌握Java的垃圾收集器与内存分配策略对于开发高性能、稳定的应用至关重要,这涉及到程序的运行效率、内存消耗和避免内存泄漏等问题。通过理解这些概念,开发者可以更好地理解和解决Java应用程序中的内存问题,...
Java提供了多种不同的垃圾收集器策略,如串行GC、并行GC、并发标记扫描GC(CMS)和G1 GC等,它们各有优缺点,适用于不同的场景和性能需求。例如,串行GC适合小型应用或单线程环境,而并行GC和并发GC则更适合多处理器...
- **G1 GC(Garbage-First GC)**:新一代的垃圾收集器,采用分区策略,兼顾吞吐量和暂停时间,适用于大型应用。 3. **垃圾收集阶段**: - **标记**:识别哪些对象是存活的,哪些是垃圾。 - **清除**:回收标记...
G1(Garbage-First)收集器是现代JVM中的一种先进垃圾收集器,它试图平衡吞吐量和延迟,同时减少Full GC的发生。 总的来说,理解并优化Java垃圾收集器的工作机制对于提升Java应用的性能和稳定性至关重要。开发者...
* Concurrent Mark-and-Sweep (CMS) 垃圾收集器:使用多线程进行垃圾收集,适合需要低 pause 时间的应用程序。 * G1 垃圾收集器:使用Region-based垃圾收集,适合需要高吞吐量和低 pause 时间的应用程序。 垃圾收集...