1.什么是 JVM?说说 JVM 的其他特性?为什么要学习 JVM?说说 JVM 的组织架构(补充)
2.能说一下 JVM 的内存区域吗?介绍一下程序计数器?介绍一下 Java 虚拟机栈?一个什么都没有的空方法,空的参数都没有,那局部变量表里有没有变量?介绍一下本地方法栈?介绍一下本地方法栈的运行场景?native 方法解释一下?介绍一下 Java 堆?堆和栈的区别是什么?介绍一下方法区?变量存在堆栈的什么位置?说一下 JDK 1.6、1.7、1.8 内存区域的变化?为什么使用元空间替代永久代?
3.对象创建的过程了解吗?对象的销毁过程了解吗?堆内存是如何分配的?什么是指针碰撞?什么是空闲列表?new 对象时,堆会发生抢占吗?JVM 怎么解决堆内存分配的竞争问题?能说一下对象的内存布局吗?说说对象头的作用?类型指针会被压缩吗?实例数据了解吗?对齐填充了解吗?为什么非要进行 8 字节对齐呢?new Object() 对象的内存大小是多少?用过 JOL 查看对象的内存布局吗?
4.对象的引用大小了解吗?JVM 怎么访问对象的?说一下对象有哪几种引用?
5.Java 堆的内存分区了解吗?说一下新生代的区域划分?对象什么时候会进入老年代?长期存活的对象如何判断?大对象如何判断?动态年龄判定了解吗?STW 了解吗?如何暂停线程呢?什么是安全点?
6.对象一定分配在堆中吗?什么是逃逸分析?逃逸具体是指什么?逃逸分析会带来什么好处?
7.内存溢出和内存泄漏了解吗?能手写内存溢出的例子吗?内存泄漏可能由哪些原因导致呢?有没有处理过内存泄漏问题?有没有处理过内存溢出问题?有没有处理过内存溢出问题?
8.讲讲 JVM 的垃圾回收机制(补充)垃圾回收的过程是什么?如何判断对象仍然存活?什么是引用计数法?做可达性分析的时候,应该有哪些前置性的操作?Java 中可作为 GC Roots 的引用有哪几种?
9.说说虚拟机栈中的引用?说说本地方法栈中 JNI 的引用?说说类静态变量?说说运行时常量池中的常量?
10.finalize()方法了解吗?垃圾收集算法了解吗?说说标记-清除算法?说说标记-清除算法?说说标记-整理算法?说说分代收集算法?为什么要用分代收集呢?标记复制的标记过程和复制过程会不会停顿?
11.Minor GC、Major GC、Mixed GC、Full GC 都是什么意思?FULL gc怎么去清理的?Young GC 什么时候触发?什么时候会触发 Full GC?空间分配担保是什么?
12.知道哪些垃圾收集器?说说 Serial 收集器?说说 ParNew 收集器?说说 Parallel Scavenge 收集器?说说 Serial Old 收集器?说说 Parallel Old 收集器?说说 CMS 收集器?说说 G1 收集器?说说 ZGC 收集器?垃圾回收器的作用是什么?能详细说一下 CMS 的垃圾收集过程吗?
13.什么是三色标记法?G1 垃圾收集器了解吗?有了 CMS,为什么还要引入 G1?你们线上用的什么垃圾收集器?工作中项目使用的什么垃圾回收算法?垃圾收集器应该如何选择?
14.用过哪些性能监控的命令行工具?你一般都怎么用jmap?了解哪些可视化的性能监控工具?用过哪些第三方的工具?配置堆内存大小的参数有哪些?配置 GC 收集器的参数有哪些?配置并行收集的参数有哪些?打印 GC 回收的过程日志信息的参数有哪些?做过 JVM 调优吗?CPU 占用过高怎么排查?内存飙高问题怎么排查?
15.频繁 minor gc 怎么办?频繁 Full GC 怎么办?该怎么排查 Full GC 频繁问题?
16.了解类的加载机制吗?(补充)类加载器有哪些?能说一下类的生命周期吗?类装载的过程知道吗?载入过程 JVM 会做什么?什么是双亲委派模型?为什么要用双亲委派模型?如何破坏双亲委派机制?有哪些破坏双亲委派模型的典型例子?说说SPI 机制?说说热部署?Tomcat 的类加载机制了解吗?你觉得应该怎么实现一个热部署功能?说解释执行和编译执行的区别(补充)