JVM 基础-类字节码详解
- 多语言编译为字节码在 JVM 运行
- Java 字节码文件
-- Class文件的结构属性
-- 从一个例子开始
-- 反编译字节码文件
-- 字节码文件信息
-- 常量池
-- 方法表集合
-- 类名 - 再看两个示例
-- 分析 try-catch-finally
-- Kotlin 函数扩展的实现
JVM 基础-类加载机制
- 类的生命周期
-- 类的加载:查找并加载类的二进制数据
-- 连接
-- 初始化
-- 使用
-- 卸载 - 类加载器,JVM 类加载机制
-- 类加载器的层次
-- 寻找类加载器
-- 类的加载 - JVM 类加载机制
- 自定义类加载器
JVM 基础-JVM 内存结构
- Overview
- 程序计数器
- Java 虚拟机栈
- 本地方法栈
- 堆
- 方法区
- 运行时常量池
- 直接内存
JVM 基础-Java 内存模型引入
- JMM引入
-- 从堆说起
-- 堆栈里面放了什么?
-- 线程栈如何访问堆上对象?
-- 线程栈访问堆示例 - JMM 与硬件内存结构关系
-- 硬件内存结构简介
-- JMM与硬件内存连接-引入
-- JMM 与硬件内存连接-对象共享后可见性
-- JMM 与硬件内存连接-竞态条件
JVM 基础-Java 内存模型详解
- 基础
-- 并发编程模型的分类
-- Java 内存模型的抽象
-- 重排序
-- 处理器重排序与内存屏障指令
-- happens-before - 重排序
-- 数据依赖性
-- as-if-serial 语义
-- 程序顺序规则
-- 重排序对多线程的影响 - 顺序一致性
-- 数据竞争与顺序一致性保证
-- 顺序一致性内存模型
-- 同步程序的顺序一致性效果
-- 未同步程序的执行特性 - 总结
-- 处理器内存模型
-- JMM,处理器内存模型与顺序一致性内存模型之间的关系
-- JMM 的设计
-- JMM 的内存可见性保证
-- JSR-133对就内存模型的修补
JVM 基础-Java 垃圾收集
- 判断一个对象是否可被回收
-- 1、引用计数算法
-- 2、可达性分析算法
-- 3、方法区的回收
-- 4、finalize() - 引用类型
-- 1、强引用
-- 2、软引用
-- 3、弱引用
-- 4、虚引用 - 垃圾回收算法
-- 1、标记-清除
-- 2、标记-整理
-- 3、复制
-- 4、分代收集 - 垃圾收集器
-- 1、Serial 收集器
-- 2、ParNew 收集器
-- 3、Parallel Scavenge 收集器
-- 4、Serial Old 收集器
-- 5、Parallel Old 收集器
-- 6、CMS 收集器
-- 7、G1收集器 - 内存分配与回收策略
-- Minor GC和 Full GC
-- 内存分配策略
调试拍错-JVM 调优参数
- 调试排错-JVM 调优参数
-- JVM 参数
-- 垃圾回收
调试排错-Java OOM 分析
- Java 堆内存溢出
java.lang.OutOfMemoryError: Java heap space 堆内存溢出 - MetaSpace(元数据)内存溢出
java.lang.OutOfMemoryError: Metaspace 元数据溢出
注意:JDK8 中移除永久代,使用 MetaSpace来保存类加载之后的类信息,字符串常量池也被移动到 Java 堆