20.互联网大厂高频面试题-垃圾回收器(上)

文章目录

  • 垃圾回收器的种类
  • 串行并行并发G1四大垃圾回收方式
    • 总结
  • 如何查看默认的垃圾回收器
    • 如何查看默认的垃圾收集器
  • jvm默认的垃圾收集器有哪些
  • 7大垃圾收集器概述
  • GC之约定参数说明
    • server/client模式
  • GC之Serial收集器
    • 串行gc(serial)/(serial copying)
  • GC之ParNew收集器
  • GC之Parallel收集器
  • GC之ParallelOld收集器
  • GC之CMS收集器
    • CMS的详细过程-四步
      • 四步概述
      • 优缺点
    • CMS配置触发
  • GC之SerialOld收集器
  • 6种垃圾回收器总结
  • 如何选择垃圾收集器

垃圾回收器的种类

20.互联网大厂高频面试题-垃圾回收器(上)_第1张图片
常见面试题如上,垃圾回收算法有4种(引用计数,复制拷贝,标记清除,标记整理)。
那么,垃圾回收器谈谈你的理解:
20.互联网大厂高频面试题-垃圾回收器(上)_第2张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第3张图片
俗称:串行回收,并行回收,并发标记清除,G1. 垃圾回收的方式:串行,并行,并发,g1.截至到java10,说这个都没问题。
java11.12又多了一种叫zgc。目前讲解以java8为例,先讲这四种。

串行并行并发G1四大垃圾回收方式

20.互联网大厂高频面试题-垃圾回收器(上)_第4张图片
串行垃圾回收器:为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有的用户线程,所以不适合服务器环境。
回收可视化效果如下:蓝色为程序执行,黄色为垃圾回收,当发生垃圾回收的时候,正常的程序线程要被暂停。
20.互联网大厂高频面试题-垃圾回收器(上)_第5张图片
并行垃圾回收器:多个垃圾回收线程并行工作,此时用户线程是暂停的,适用于科学计算,大数据处理首台处理等弱交互场景。
回收可视化过程如下:
20.互联网大厂高频面试题-垃圾回收器(上)_第6张图片
并发垃圾回收器:用户线程和垃圾回收线程同时执行(不一定是并行,可能是交替执行),不需要停顿用户线程,互联网公司多用他,适用对响应时间有要求的场景。
回收过程可视化:
在这里插入图片描述
G1:是garbage first的缩写。从java7开始论证,java8就可以使用了,历经了10年的精心准备和论证。从java9开始,默认的垃圾回收方式就是g1.java11又变成了zgc。G1了垃圾回收器将堆内存分割成不同的区域然后并发的对其进行垃圾回收。
20.互联网大厂高频面试题-垃圾回收器(上)_第7张图片

总结

20.互联网大厂高频面试题-垃圾回收器(上)_第8张图片
截至到java8,主要是这三种垃圾回收器。截止到java8,包括java8如果是互联网公司,都会改成CMS。

如何查看默认的垃圾回收器

在这里插入图片描述
天上飞的理念,需要地上跑的实现。垃圾回收算法是思想,需要去落地。
20.互联网大厂高频面试题-垃圾回收器(上)_第9张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第10张图片
本篇博客的内容是对上述的思想进行继续深化,继续落地实现。也就是具体的垃圾回收器。
20.互联网大厂高频面试题-垃圾回收器(上)_第11张图片

如何查看默认的垃圾收集器

20.互联网大厂高频面试题-垃圾回收器(上)_第12张图片
java8默认是并行垃圾回收思想。

jvm默认的垃圾收集器有哪些

可以查看openjdk的源码:
20.互联网大厂高频面试题-垃圾回收器(上)_第13张图片
上面有6种,第七种已经被废弃和淘汰了叫做serialOldGC。一共是7种。

7大垃圾收集器概述

20.互联网大厂高频面试题-垃圾回收器(上)_第14张图片
G1可以覆盖young和old区,都可以覆盖。
20.互联网大厂高频面试题-垃圾回收器(上)_第15张图片
打错号的可以不用了。

GC之约定参数说明

20.互联网大厂高频面试题-垃圾回收器(上)_第16张图片

defnew:默认新生代垃圾回收器。
tenured:老年代用的垃圾回收器。
parnew:在新生代用并行回收。
psyoungGen:在新生代使用并行垃圾回收器。
paroldgen:在老年区域使用并行垃圾回收。

server/client模式

在这里插入图片描述

20.互联网大厂高频面试题-垃圾回收器(上)_第17张图片

GC之Serial收集器

20.互联网大厂高频面试题-垃圾回收器(上)_第18张图片

一旦配置了新生代的垃圾回收机制,老年代就自动配置了,比如:新生代是串行,老年代就是串行。

串行gc(serial)/(serial copying)

20.互联网大厂高频面试题-垃圾回收器(上)_第19张图片
STW:stop the worldl。
在这里插入图片描述

20.互联网大厂高频面试题-垃圾回收器(上)_第20张图片
代码演示:
vm参数:堆空间10m,打印gc细节,打印简单版的jvm参数,使用串行垃圾回收器。
在这里插入图片描述
代码:
20.互联网大厂高频面试题-垃圾回收器(上)_第21张图片

运行效果:
20.互联网大厂高频面试题-垃圾回收器(上)_第22张图片
设置串行垃圾回收器之后,新生代就会用默认的串行垃圾回收器DefNew。养老带用的也是串行垃圾回收器。参考下图的连线。
20.互联网大厂高频面试题-垃圾回收器(上)_第23张图片

GC之ParNew收集器

20.互联网大厂高频面试题-垃圾回收器(上)_第24张图片
这个只改变新生代为并行的模式,老年代还是串行的。最佳实践可以看下图的连线,配合老年代的CMS。
20.互联网大厂高频面试题-垃圾回收器(上)_第25张图片
修改vm参数为下图:
在这里插入图片描述
跟上面同样的代码的运行结果:
在这里插入图片描述
确实改变了垃圾回收器为parNewGC。
20.互联网大厂高频面试题-垃圾回收器(上)_第26张图片
新生代的GC方式改为了ParNew的gc方式。新生代从串行收集变成了并行收集。
养老区没发生改变,还是串行垃圾回收,但是jvm提示已经废弃了,看下图的红字。
20.互联网大厂高频面试题-垃圾回收器(上)_第27张图片
言下之意,并行新生代+串行老年代已经不推荐使用了,看下图:
20.互联网大厂高频面试题-垃圾回收器(上)_第28张图片

在这里插入图片描述

可以修改并行进行垃圾回收线程的数量:
在这里插入图片描述

GC之Parallel收集器

总结一下上面两个垃圾回收器:
新生代单线程+老年代单线程----->serial
新生代多线程+老年代单线程----->ParNew
java8安装之后,使用的是parallel Scavenge 收集器。他是这样的:
新生代多线程+老年代多线程----->Parallel Scavenge
20.互联网大厂高频面试题-垃圾回收器(上)_第29张图片
详细介绍:
20.互联网大厂高频面试题-垃圾回收器(上)_第30张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第31张图片
在这里插入图片描述

为啥会互相激活呢?可以看jdk的源码,这种组合的策略是或者的关系,他俩走的是一个逻辑,所以可以互相激活。
20.互联网大厂高频面试题-垃圾回收器(上)_第32张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第33张图片

代码演示,vm参数:
在这里插入图片描述
运行截图:新生代是并行GC,老年代也是并行GC。这就是parallelgc的具体的执行策略。
20.互联网大厂高频面试题-垃圾回收器(上)_第34张图片

GC之ParallelOld收集器

接下来介绍养老区的垃圾回收器。
20.互联网大厂高频面试题-垃圾回收器(上)_第35张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第36张图片

随着jdk版本的更迭,为了保证吞吐量,垃圾回收器进行了优化。
设置vm参数:
在这里插入图片描述
对于java8,默认就是这个,不用加了。对于java8,parallel收集器和parallelOld收集器是互相激活的。
20.互联网大厂高频面试题-垃圾回收器(上)_第37张图片
运行代码,查看控制台结果:
20.互联网大厂高频面试题-垃圾回收器(上)_第38张图片
新生代=并行,老年代=并行。java8不做配置,也是这套东西。

GC之CMS收集器

CMS是标记清除算法的垃圾回收器实现。
20.互联网大厂高频面试题-垃圾回收器(上)_第39张图片
详细介绍:
20.互联网大厂高频面试题-垃圾回收器(上)_第40张图片
简单来说,互联网公司,做优化的话,就应该配置成CMS收集器。
在这里插入图片描述
注意看下图的连线,说明了这个组合。
20.互联网大厂高频面试题-垃圾回收器(上)_第41张图片

CMS的详细过程-四步

20.互联网大厂高频面试题-垃圾回收器(上)_第42张图片

20.互联网大厂高频面试题-垃圾回收器(上)_第43张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第44张图片

结合上面2图,第一步初始标记是停顿的。
在这里插入图片描述
第二步,并发标记,和用户线程一起,不需要停顿。
在这里插入图片描述
第三步:重新标记,需要暂停。
在这里插入图片描述
第四步:并发清除
在这里插入图片描述

四步概述

20.互联网大厂高频面试题-垃圾回收器(上)_第45张图片

优缺点

20.互联网大厂高频面试题-垃圾回收器(上)_第46张图片
在这里插入图片描述
在这里插入图片描述

CMS配置触发

在这里插入图片描述
执行结果如下:
20.互联网大厂高频面试题-垃圾回收器(上)_第47张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第48张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第49张图片
这种配置方法完成了下图的组合:新生代还是ParNew,老年代是CMS。
20.互联网大厂高频面试题-垃圾回收器(上)_第50张图片

GC之SerialOld收集器

这是用在老年代的串行垃圾回收器。
20.互联网大厂高频面试题-垃圾回收器(上)_第51张图片
vm参数:
在这里插入图片描述

运行结果:
20.互联网大厂高频面试题-垃圾回收器(上)_第52张图片
基本可以不用了。

6种垃圾回收器总结

底层代码:
20.互联网大厂高频面试题-垃圾回收器(上)_第53张图片
实际代码就是设置vm参数。
故意配置一下多个垃圾回收器,会如何呢?
20.互联网大厂高频面试题-垃圾回收器(上)_第54张图片
第一组实验结果:实际跟配置一个效果一样。
在这里插入图片描述
第二组实验结果:也是跟只配置cms一样。
在这里插入图片描述

如何选择垃圾收集器

20.互联网大厂高频面试题-垃圾回收器(上)_第55张图片
20.互联网大厂高频面试题-垃圾回收器(上)_第56张图片

你可能感兴趣的:(面试题视频笔记)