第229天学习打卡(知识点回顾 GC垃圾器)
Posted doudoutj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第229天学习打卡(知识点回顾 GC垃圾器)相关的知识,希望对你有一定的参考价值。
知识点回顾
Server/Client模式分别是什么
操作系统:
- 32位Window操作系统,不论硬件如何都默认使用Client的JVM模式
- 32位其他操作系统,2G内存同时有2个cpu以上用Server模式,低于该配置还是Client模式
- 64位只有server模式
GC垃圾回收算法和垃圾收集器的关系
GC算法(引用计数/复制/标记清除/标记整理)是内存回收的方法论,垃圾收集器是算法的落地实现。
4种主要垃圾收集器: 串行回收,并行回收,并发标记清除, G1
串行垃圾回收器(Serial)
它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程。且只是要一个线程进行垃圾回收,会暂停所有的用户线程。所以不适合服务器环境。
一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有的工作线程指导它收集结束。
串行收集器是最古老,最稳定以及效率高的收集器,只使用一个线程去回收但其在进行垃圾收集过程中,可能会产生较长的停顿(Stop-the-world状态)。虽然在收集垃圾过程中需要暂停所有其他的工作线程,但是它简单高效对于限定单个CPU环境来说,没有线程交互的开销可以获得最高的单线程垃圾收集效率,因此Serial垃圾收集器依然是Java虚拟机运行在client模式下默认的新生代垃圾收集器。
对应JVM参数是: -XX:+UseSerialGC
开启后会使用:Serial(Young区用)+Serical Old(Old区用)的收集器组合
表示:新生代、老年代都会使用串行回收收集器,新生代使用复制算法,老年代使用标记-整理算法
并行垃圾回收器
多个垃圾收集线程并行工作,此时用户线程是暂停的,适用于科学计算/大数据处理等弱交互场景。
使用多线程进行垃圾回收,在垃圾收集时,会stop-the-world暂停其他所有的工作线程直到它收集结束。
ParNew收集器其实就是Serial收集器新生代的并行多线程版本,最常见的应用场景时配合老年代的CMS GC工作,其余的行为和Serial收集器完全一样,ParNew垃圾收集器在垃圾收集过程中同样也要暂停所有其他的工作线程。它是很多java虚拟机运行在Server模式下新生代的默认垃圾收集器。
常用对应JVM参数:-XX:+UseParNewGC 启用ParNew收集器,只影响新生代的收集,不影响老年队
开启上述参数后,会使用:ParNew(Young区用)+Serial Old的收集器组合,新生代还有复制算法,老年队采用标记-整理算法。
但是ParNew+Tebured这样的搭配,java8已经不再被推荐
并发垃圾回收器
用户线程和垃圾收集线程同时执行(不一定是并行,可能交替执行),不需要暂停用户线程,互联网公司多用它,适用对响应时间有要求的场景。
G1垃圾回收器
G1垃圾回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收。
java -XX:+PrintCommandLineFlags -version 查看服务器默认的垃圾收集器是哪一个
默认的垃圾收集器有哪些
- UseSerialGC
- UseParallelGC
- UseConcMarkSweepGC
- UseParNewGC
- UseParallelOldGC
- UseG1GC
以上是关于第229天学习打卡(知识点回顾 GC垃圾器)的主要内容,如果未能解决你的问题,请参考以下文章
第267天学习打卡(知识点回顾 springboot返回值解析器原理)