无论你是跟同事、同学、上下级、同行、或者面试官讨论技术问题的时候,很容易卷入JVM大型撕逼现场。为了能够让大家从大型撕逼现场中脱颖而出,最近我冥思苦想如何把知识点尽可能呈现的容易理解,方便记忆。于是就开启了这一系列文章的编写。
为了让JVM相关知识点能够形成一个体系,arthinking将编写整理一系列的专题,以尽量以图片的方式描述相关知识点,并且最终把所有相关知识点串成了一张图。
另外把文章列表和关键信息写到表格里面去了。
JVM系列文章
章节 | 关键词 | 相关思考 |
---|---|---|
Java运行时数据区域是如何工作的 | JVM内存布局 对象访问定位 |
1. JVM内存布局是怎么划分的? 2. JVM里面各个区直接是怎么配合工作的? 3. 对象在内存中是如何布局的? 4. 什么是操作数栈和局部变量表?可否在class文件中展示下? 5. 运行时常量和字符串常量有什么区别? 6. 对象访问定位方式有哪些?各有什么优点 |
Java垃圾回收机制 | 可达性分析 垃圾收集算法 垃圾收集器 |
1. 一个对象的一生经历了什么? 2. 如何判断对象是否可用? 3. 引用计数法和可达性分析算法各有什么优缺点? 4. 哪些对象可以作为GC ROOT? 5. 垃圾回收的时候如何快速寻找到根节点?(安全点和OopMap) 6. 垃圾回收算法有哪些?各有什么优缺点? 7. 有哪些垃圾手气,各有什么优缺点,适用什么场景 8. 何时触发MinorGC和MajorGC 9. 什么是空间分配担保 |
Java对象历险记 | 分配担保 空间分配 |
1. Java对象进入堆之后,它的一生都经历了什么? |
Class文件十六进制背后的秘密 | Class文件 反汇编 堆栈原理 |
1. 运行时常量池和静态常量池有什么区别? 2. Class文件里面都有什么内容? 3. Class文件反汇编之后的格式里面分别有什么,尝试解读里面方法中的汇编指令 4. 本地变量表和操作数栈是如何工作的 |
一篇图文彻底弄懂Class文件是如何被加载进JVM的 | 类加载器 加载 连接 初始化 |
1. Class.forName究竟是怎么获取Class对象的Class对象又是什么? 2. Class文件是如何被加载到JVM里面的? 3. 类变量是存在堆中还是存在方法区中? 4. 类构造器 <clinit> 方法什么时候执行? |
一篇图文彻底弄懂类加载器与双亲委派机制 | 类加载器 双亲委派机制 |
1. 类加载器是怎么背创建出来的? 2. 什么是双亲委派机制?为什么要有这种机制? 3. Class实例和类加载器究竟是在Java Heap中,还是在方法区中? 4. 为何要有线程上下文类加载器 |
Java最大栈深度有多大 | 堆栈 |
1. Java最大栈深度多大 2. 程序中如何调优 |
Java代码编译方式和JVM三种执行模式 | JIT javac |
1. Java代码编译方式有哪些? 2. JVM执行方式有哪些? |
JVM是如何进行方法调用的 | 静态分派 动态分派 |
1. JVM里面是如何进行方法调用的? 2. 什么是静态分派? 3. 什么是动态分派? 4. 怎么保证动态分派的执行效率? 5. 重写和重载的执行原理? |
10分钟教你如何hack掉Java编译器 | 编译流程 javac JIT 注解处理器 |
1. 编译器一般编译流程 2. javac的编译流程是怎样的 3. 如何hack掉Java编译器 4. 运行时DI和编译期DI的区别 |
深入探索Java泛型的本质 | 泛型 |
1. 为什么需要泛型 2. Java代码在编译后是如何保存泛型信息的 3. Java泛型与C++、Python中的有何区别 4. 如何动态获取泛型类型 |
Java界的性能优化高手 | 编译器 解释器 JIT |
1. javac做了什么优化 2. Java后端编译器的发展史 3. JIT是如何工作的 4. 效率与质量的衡量 |
在整理这个专题的时候,出了一个高效学习的介绍文章,这里也推荐给大家:碎片化知识盛行,学东西如何做到过目不忘