标签:reg 理解 比例 oem 界面 targe hot tps www
HotSpot虚拟机提供了多种垃圾收集器,每种收集器都有各自的特点,没有最好的垃圾收集器,只有最适合的垃圾收集器。根据新生代和老年代各自的特点,我们应该分别为它们选择不同的收集器,以提升垃圾回收效率。
新生代垃圾收集器:
a) 单线程:只开启一条GC线程进行垃圾回收,并且在垃圾回收过程中停止一切用户线程,从而用户的请求或图形化界面会出现卡顿。
b) 适合客户端应用
c) 简单高效:由于Serial收集器只有一条GC线程,因此避免了线程切换的开销,从而简单高效。
d) 采用“复制”算法
a) 多线程并行执行:ParNew由多条GC线程并行地进行垃圾清理。但清理过程仍然需要停止一切用户线程。但由于有多条GC线程同时清理,清理速度比Serial有一定的提升。
b) 适合多CPU的服务器环境
c) 采用“复制算法”
d) 追求“降低停顿时间”:和Serial相比,ParNew使用多线程的目的就是缩短垃圾收集时间,从而减少用户线程被停顿的时间。
e) 和Serial的对比:ParNew和Serial唯一的区别就是使用了多线程进行垃圾回收,在多CPU的环境下性能比Serial会有一定程度的提升;但线程切换需要额外的开销,因此在单CPU环境中表现不如Serial。
a) 什么是吞吐量:吞吐量是指用户线程运行时间占CPU总时间的比例。CPU总时间包括:用户线程运行时间 和 GC线程运行的时间。因此,吞吐量越高表示用户线程运行时间越长,从而用户线程能够被快速处理完。
b) 降低停顿时间的两种方式
i. 在多CPU环境中使用多条GC线程,从而垃圾回收的时间减少,从而用户线程停顿的时间也减少
ii. 实现GC线程与用户线程并发执行。所谓并发,就是用户线程与GC线程交替执行,从而每次停顿的时间会减少,用户感受到的停顿感降低,但线程之间不断切换意味着需要额外的开销,从而垃圾回收和用户线程的总时间将会延长。
老年代垃圾收集器
a) Serial Old收集器是Serial的老年代版本
b) 单线程,在垃圾收集时只启动一条GC线程
c) 适合客户端应用
d) 它们唯一的区别就是Serial Old工作在老年代,使用“标记-整理”算法;而Serial工作在新生代,使用“复制”算法。
a) 吞吐量:由于CMS在垃圾收集过程使用用户线程和GC线程并行执行,从而线程切换会有额外开销,因此CPU吞吐量就不如在垃圾收集过程中停止一切用户线程的方式来的高。
b) 无法处理浮动垃圾,导致频繁的FullGC:由于垃圾清除过程中,用户线程和GC线程并发执行,也就是用户线程仍在执行,那么在执行过程中会产生垃圾,这些垃圾称为“浮动垃圾”。 如果CMS在垃圾清理过程中,用户线程需要在老年代中分配内存时发现空间不足时,就需要再次发起Full GC,而此时CMS正在进行清除工作,因此此时只能由Serial Old临时对老年代进行一次Full GC。
c) 使用标记-清除算法或者是标记-整理算法容易产生碎片空间
通用垃圾收集—G1垃圾收集器:目前为止最牛逼的垃圾收集器
a) 追求停顿时间
b) 多线程GC
c) 面向服务器端使用
d) 标记-整理和复制算法合并,不会产生碎片内存
e) 可对整个堆内存进行垃圾回收
f) 可以预测停顿时间
标签:reg 理解 比例 oem 界面 targe hot tps www
原文地址:https://www.cnblogs.com/BaoZiY/p/10632219.html