Update Java 虚拟机.md

CMS收集器,“浮动垃圾”部分说法不准确,启用Serial Old收集器并不是因为预留的内存不够存放浮动垃圾,而是预留的内存无法满足用户线程的使用,也就是用户线程创建新对象内存不足。
This commit is contained in:
wardseptember 2020-08-02 15:37:17 +08:00 committed by GitHub
parent 1392056d73
commit 7a2e7aeb69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -351,7 +351,7 @@ CMSConcurrent Mark SweepMark 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 收集器