目录
1 入门部分
1.1 为什么要学习 JVM?
1.2 你了解哪些 JVM 产品?
1.3 JVM 的构成有哪几部分?
2 类加载部分
2.1 你知道哪些类加载器?
2.2 为什么需要多个类加载器?
2.3 什么是双亲委派类加载模型?
2.4 双亲委派方式加载类有什么优势、劣势?
2.5 描述一下类加载时候的基本步骤是怎样的?
2.6 什么情况下会触发类的加载?
2.7 类加载时静态代码块一定会执行吗?
2.8 如何理解类的主动加载和被动加载?
2.9 为什么要自己定义类加载器,如何定义?
2.10 内存中一个类的字节码对象可以有多个吗?
3 JVM 运行内存部分
3.1 JVM 运行内存是如何划分的?
3.2 JVM 中的程序计数器用于做什么?
3.3 JVM 虚拟机栈的结构是怎样的?
3.4 JVM 虚拟机栈中局部变量表的作用是什么?
3.5 JVM 虚拟机栈中操作数栈的做用是什么?
3.6 JVM 堆的构成是怎样的?
3.7 Java 对象分配内存的过程是怎样的?
3.8 JVM 年轻代幸存区设置的比较小会有什么问题?
3.9 JVM 年轻代伊甸园区设置的比例比较小会有什么问题?
3.10 JVM 堆内存为什么要分成年轻代和老年代?
3.11 项目中最大堆和初始堆的大小为什么推荐设置为一样的?
3.12 什么情况下对象会存储到老年代?
3.13 Java 中所有的对象创建都是在堆上分配内存的?
3.14 如何理解 JVM 方法区以及它的构成是怎样的?
3.15 JDK8 中 Hotsport 虚拟机的方法区内存在哪里?
3.16 什么是逃逸分析以及可以解决什么问题?
3.17 如何理解对象的标量替换,为什么要进行标量替换?
3.18 什么是内存溢出以及导致内存溢出的原因?
3.19 什么是内存泄漏以及导致内存泄漏的原因?
3.20 JAVA 中的四大引用类型有什么特点?
3.21 项目中的哪些地方用到了缓存?
3.22 假如让你设计一个缓存你会考虑哪些问题?
4 字节码增强部分
4.1 什么是字节码?
4.2 为何要学习字节码?
4.3 如何解读字节码内容?
4.4 字节码内容由哪几部分构成?
4.5 什么是字节码增强?
4.6 为什么要进行字节码增强?
4.7 你了解哪些字节码增强技术?
4.8 什么是热替换以及如何实现?
5 JVM 垃圾回收部分
5.1 何为 GC?
5.2 为什么要 GC?
5.3 如何判定对象是否为垃圾?
5.4 你知道哪些 GC 算法?
5.5 JVM 中有哪些垃圾回收器?
5.6 如何查看 JVM 默认的垃圾收集器?
5.7 说出几个常用的 JVM 配置参数?
5.8 JAVA 中的堆区为什么要分代?
5.9 服务频繁 fullgc,younggc 次数较少,可能原因?
5.10 你知道哪些 JVM 小工具?
1 入门部分
1.1 为什么要学习 JVM?
第一:为了面试。(企业招聘战略在升级,业务和技术问的越来越身)
第二:为了更好的理解 JAVA。
第三:为了更好的解决线上问题。
1) 实现线上软件升级。(热替换)
2) 更好防止内存泄漏,提高内存的有效使用率。
3) 更好提高系统的吞吐量。
1.2 你了解哪些 JVM 产品?
Oracle 公司的 HotSpot。
IBM 公司的 J9。
阿里公司的 TaobaoVM。
1.3 JVM 的构成有哪几部分?
第一:类加载子系统(负责将类读到内存,校验类的合法性,对类进行初始化)
第二:运行时数据区(负责存储类信息,对象信息,执行逻辑)
第三:执行引擎(负责从指定地址对应的内存中数据然后解释执行以及 GC 操作)
第四:本地库接口(负责实现 JAVA 语言与其它编程语言之间的协同)
2 类加载部分
2.1 你知道哪些类加载器?
第一:BootStrapClassLoader
第二:ExtClassLoader
第三:AppClassLoader
第四:自定义 ClassLoader
2.2 为什么需要多个类加载器?
每