本文是对于深入理解java虚拟机的笔记和提纲整理
主要用于复习和知识点快速复习
第二章:内存结构
笔记:https://blog.csdn.net/qq_41157876/article/details/107189395
2.1 内存结构
- 方法区
- 栈
- 堆
- 本地方法栈
- 程序计数器
2.2 直接内存
2.3 对象创建过程
- 检查类加载
- 分配内存地址(CAS / TLAB)
- 地址数据清零
- 设置对象头
- 执行构造方法 <init>()等
2.4 对象内存布局
- 对象头(MarkWord + KlassWord + (数组))
- 实例数据(父类数据 + 本类数据)
- padding
2.5 对象的访问定位
- 句柄访问
- 直接指针访问(Hotspot使用)
第三章:垃圾回收
笔记:https://blog.csdn.net/qq_41157876/article/details/107748251
3.1 判断对象是否可回收
- 引用计数算法
- 可达性分析算法
3.2 四种引用
- 强引用
- 软引用
- 弱引用
- 虚引用
3.3 finalize()方法
3.4 垃圾回收
- 三个假说(朝生夕灭,越熬越久,跨代引用少)
- 安全区域的概念
- GC分类
- 垃圾回收算法(标记清除,标记整理,复制)
- jvm实际回收算法
- 记忆集和卡表
- 并发问题下如何标记GC ROOT(增量更新,原始快照)
3.5 垃圾回收器
- Serial
- SerialOld
- ParNew
- Parallel Scavenge
- Parallel Old
- CMS(运行流程,优缺点)
- G1(概述及运行流程,特点,其他细节,优缺点)
第四章:类加载
笔记:https://blog.csdn.net/qq_41157876/article/details/107798188
4.1 Java运行流程
- 运行期
- 编译期
4.2 Class类文件结构
4.3 字节码指令
- 初始化和构造(<cinit>()V,<init>()V)
- 方法调用(静态绑定(解析,非虚方法)/动态绑定(分派,虚方法))
- invokevirtual
- invokespecial
- invokespecial
- invokevirtual执行流程(多态原理)
- vtable和itable
4.4 类加载机制
- 加载(用类加载器将字节码载入方法区中)
- 连接
- 校验(检验类是否符合jvm规范)
- 准备(为静态变量分配内存并设置初始值)
- 解析(将常量池内的符号引用替换为直接引用)
- 初始化(执行static的内容 <cinit>(),懒加载)
4.5 类加载器
- 三个加载器(BootStrap / Extension / Application)
- 双亲委派机制
- 破坏双亲委派机制(线程上下文类加载器TCL)
第四章:前端与后端优化
笔记:https://blog.csdn.net/qq_41157876/article/details/107884006
5.1 前端优化(编译期优化) —— 语法糖
- 语法糖的概念
- 前端优化 / 语法糖
- 泛型
- 最常用的语法糖
- 拆箱装箱
- 循环遍历 for( int a : list)
- 变长参数 public static void main( String[] args )
- if语句优化
- 默认构造器
- .....
5.2 后端优化(.class文件 转 二进制机器码 / 运行期)
- 解释器和即时编译器
- JIT优化技术
- 方法内联
- 逃逸分析
- 公共子表达式消除
第五章 高效并发
笔记:https://blog.csdn.net/qq_41157876/article/details/112605136
6.1 Java内存模型
- 缓存一致性(Cache Coherence)
- JAVA内存模型JMM
6.2 线程
- Java线程的实现
6.3 线程安全与锁优化