diff --git a/docs/notes/Java 虚拟机.md b/docs/notes/Java 虚拟机.md index 65c288fe..3c1287f3 100644 --- a/docs/notes/Java 虚拟机.md +++ b/docs/notes/Java 虚拟机.md @@ -351,7 +351,7 @@ CMS(Concurrent Mark Sweep),Mark Sweep 指的是标记 - 清除算法。 具有以下缺点: - 吞吐量低:低停顿时间是以牺牲吞吐量为代价的,导致 CPU 利用率不够高。 -- 无法处理浮动垃圾,可能出现 Concurrent Mode Failure。浮动垃圾是指并发清除阶段由于用户线程继续运行而产生的垃圾,这部分垃圾只能到下一次 GC 时才能进行回收。由于浮动垃圾的存在,因此需要预留出一部分内存,意味着 CMS 收集不能像其它收集器那样等待老年代快满的时候再回收。如果预留的内存不够存放浮动垃圾,就会出现 Concurrent Mode Failure,这时虚拟机将临时启用 Serial Old 来替代 CMS。 +- 无法处理浮动垃圾,可能出现 Concurrent Mode Failure。浮动垃圾是指并发标记和并发清除阶段,由于用户线程继续运行而产生的垃圾,这部分垃圾只能到下一次 GC 时才能进行回收。由于用户线程还在继续运行,因此需要预留出一部分内存提供给用户线程使用,意味着 CMS 收集不能像其它收集器那样等待老年代快满的时候再回收。如果预留的内存无法满足程序分配新对象的需要,就会出现 一次“并发失败”(Concurrent Mode Failure),这时虚拟机将临时启用 Serial Old 来替代 CMS收集老年代的垃圾。 - 标记 - 清除算法导致的空间碎片,往往出现老年代空间剩余,但无法找到足够大连续空间来分配当前对象,不得不提前触发一次 Full GC。 ### 7. G1 收集器