JVM考点分析与总结
JVM 的考察,不算特别多,感觉和操作系统,redis 这些差不多一样,虽然 JVM 也是属于 Java 的一部分,不过被我拆分出来了。
下面我先给大家分析一下 JVM 各个知识点的考点以及大公司和小公司在 JVM 上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。
希望大家可以认真看一下,看完你内心也有一个大概了。
一、考点分布
我这里在统计的时候,把 JVM 分成了垃圾回收与其他两个部分,我发现问垃圾回收,占据了 60%~70%,并且垃圾回收器基本都是问 CMS 和 G1 这两个回收器,而像其他的知识,就问的很少,剩下的就是问问内存空间分布啊,类加载啊,也都是一些比较简单的知识。
总的来说就是,学习 JVM 时,会觉得很难,但是真正会问的东西,其实不难,很多需要记忆。
二、大公司与小公司提问区别
这个的话,大小公司都会提问,具体区别,这个我倒没有太详细去区分,就是没有特别明显感受到吧,唯一有感觉的就是小公司不会问的很细,比如你讲了 G1 算法,小公司可能不会去延伸问很多东西。
另外就是,无论是大公司还是小公司,我觉得 JVM 这块就问的比较简单,更加偏向记忆型。
三、超详细考点总结(按照出现频率排序)
1.1 垃圾回收考点总结
1、掌握几种垃圾回收算法(标记-清除、标记-复制、标记-整理)
2、知道如何判断一个对象是否死亡(引用计数 + 可达性分析)
3、知道哪些可以作为 GCROOT
4、掌握几种常见垃圾回收器(重点是 CMS + G1)
5、掌握老年代 GC 与年轻代 GC,比如什么时候会发生
6、了解一两个工具,比如 jstack
7、掌握一些 GC 的配置参数
1.2 垃圾回收提问方式
1、常用的垃圾回收器有哪些?
2、CMS垃圾回收器介绍
3、知道 G1、CMS 吗(不知道,但是知道GC的3种回收算法:标记-清除、标记-复制、标记-整理
4、CMS什么时候会STW?为什么要STW?
5、如何判断对象死亡
6、垃圾回收中的三色标记法
7、yong GC 的发生时间?发生频繁,发生时间长的原因和解决方案?
8、CMS的过程?怎么标记垃圾的?三色标记法?G1的区别?
9、什么情况下老年代会发生GC?
10、可达性分析
11、判断gcroots的原则是什么
12、哪些可以作为GCROOT(这里太久没看了,没答全)
13、垃圾回收会发生在哪几个区域?
14、说一下垃圾回收?如果GC突然很慢怎么排查,比如原来GC完成只需要1秒,现在要5秒?了解哪些gc相关的工具,比如jstack之类的
15、假设HashMap里面存放100万个对象,那么gc可能会有什么问题?
2.1 其他考点总结
1、JVM 内存空间分布(能够举例子)
2、JVM 进程与线程模型
3、JAVA类加载过程
4、能够说出几个常见的类加载器
5、栈和堆的区别,以及什么时候会栈溢出、堆内存溢出
6、知道常量池
7、双亲委派原则
8、了解对象头的一些属性
2.2 其他收提问方式
1、能说一下JVM的模型吗?
2、JVM内存空间分布
3、jvm中那些结构是线程独有和共有的
4、JAVA类加载过程(加载(类加载器问题) 验证 准备 解析 初始化)
5、双亲委派原则
6、类加载器有哪些?
7、怎么打破双亲委派模型?(面试的时候答了不会)(面试官告诉我说Tomcat有)
8、堆是唯⼀可分配对象的地⽅?栈中的对象和堆中的对象内存分布有啥区别
9、为什么 Java 对象占⽤的内存⼤⼩是 8 的整数倍
10、对象头、markword
11、类加载器、类加载机制、准备和初始化在干什么
12、Java为什么被称为平台无关性语言?
13、什么会导致栈溢出、堆内存溢出?
14、怎么排查堆溢出
15、对象在哪个区?
16、Class文件在哪个地方存?