深入理解Java虚拟机知识图谱
2024-07-25 22:08:35 0 举报
AI智能生成
登录查看完整内容
深入理解Java虚拟机知识图谱
作者其他创作
大纲/内容
Java技术体系
无语言倾向
新一代即时编译器Graal
向Native迈进
灵活的胖子
语言语法的持续增强
展望Java技术的未来
实战:自己编译JDK
走进JVM
基础
类加载子系统
运行时数据区
字节码执行引擎
JVM体系概览
程序计数器
Java虚拟机栈
本地方法栈
Java堆
方法区
运行时常量池
直接内存
运行时数据区域
Java堆溢出示例
虚拟机栈和本地方法栈溢出示例
方法区和运行时常量池溢出示例
本机直接内存溢出示例
OutOfMemoryError异常示例
类加载检查
内存分配
初始化零值
设置对象头
执行init方法
对象完整创建过程
创建对象流程源码分析
对象创建过程
对象头
实例数据
对齐填充
对象的内存布局
估算对象大小
对象的访问定位
运行时数据区综合示例
JVM内存区域与对象解析
概述
引用计数算法
可达性分析算法
finalize()对象自救
判断对象是否可回收
引用类型分类
引用队列
引用类型
回收方法区
分代收集理论基础
基于分代收集的堆基本结构
Minor GC与Full GC
分代收集理论
标记-清除算法
标记-复制算法
标记-整理算法
垃圾收集算法
根节点枚举
安全点
安全区域
记忆集与卡表
写屏障
三色标记
增量更新与原始快照
读屏障
总结
并发的可达性分析
Hotspot虚拟机垃圾收集算法实现细节
Serial收集器
ParNew收集器
Parallel Scavenge收集器
Serial Old收集器
Parallel Old收集器
CMS收集器
Region
G1垃圾收集思路
收集流程
停顿时间的设置
G1的优缺点
参数设置
G1垃圾收集的类型
G1应用场景与示例
Garbage First收集器
经典垃圾收集器
Shenandoah收集器
ZGC的Region与内存布局
ZGC并发整理算法实现与染色指针
ZGC垃圾收集流程
ZGC优缺点与问题
ZCG性能
ZGC参数设置
ZGC收集器
低延迟垃圾收集器
选择合适的垃圾收集器
对象栈上分配
对象优先在Eden分配
大对象直接进入老年代
长期存活的对象将进入老年代
动态对象年龄判定
老年代空间分配担保机制
内存分配与回收策略
内存泄漏原因
内存泄漏
内存溢出
处理方法
内存泄漏与内存溢出
垃圾收集器与内存分配策略
基础工具总结
jps-虚拟机进程状况工具
jstat-虚拟机统计信息监视工具
jinfo-Java配置信息工具
jmap-Java内存映像工具
jstack-Java堆栈跟踪工具
基础故障处理工具
JHSDB:基于服务代理的调试工具
JConsole:Java监视与管理控制台
VisualVM:多合一故障处理工具
可视化故障处理工具
HSDIS-JIT生成代码反汇编
Hotspot虚拟机插件及工具
获取堆转储文件
堆转储文件
日志收集配置
GC日志分析示例
虚拟机及垃圾收集器日志
jstat调优实例
JVM性能监控与故障处理工具
GC调优原则
GC调优目的
GC调优策略
GC调优步骤
参数设置方式
GC问题处理与调优方法
大内存硬件上的程序部署策略
集群间同步导致的内存溢出
堆外内存导致的内存溢出
外部命令导致系统缓慢
服务器虚拟机进程崩溃
不恰当数据结构导致内存占用过大
由Windows虚拟内存导致的长时间停顿
由安全点导致长时间停顿
电商系统优化JVM参数(ParNew+CMS)
虚拟机调优案例分析
堆内存
栈内存
年轻代内存
方法区内存
内存分配参数
行为参数
性能调优参数
调试参数
垃圾收集器参数
JVM参数总结
调优案例分析与实战
平台无关性
魔数与主次版本号
常量池
访问标志
类索引,父类索引与接口索引集合
字段表集合
方法表集合
Code属性
Exceptions属性
InnerClasses属性
运行时注解相关属性
属性表集合
Class类文件结构
字节码与数据类型
加载与存储指令
运算指令
类型转换指令
对象创建与访问指令
操作数栈管理指令
控制转移指令
方法调用与返回指令
异常处理指令
同步指令
字节码指令简介
共有设计,私有实现
类文件结构
类的生命周期
类加载的时机与主动引用
被动引用的示例
类加载的时机
加载
验证
准备
解析
初始化
类加载的过程
类与类加载器
类加载器分类
双亲委派机制源码分析
双亲委派模型
自定义类加载器
打破方式
被破坏实例
破坏双亲委派模型
类加载器
模块的兼容性
模块化下的类加载器模型
Java模块化系统
虚拟机类加载机制
局部变量表
操作数栈
动态链接
方法返回地址
附加信息
运行时栈帧结构
(静态)解析
静态分派
动态分派
单分派与多分派
虚拟机动态分派的实现
分派
方法调用
动态类型语言
Java与动态类型
java.lang.invoke包
invokedynamic指令
实战: 掌控方法分派规则
动态类型语言支持
解释执行
基于栈的指令集与基于寄存器的指令集
基于栈的解释器执行过程
基于栈的字节码解释执行引擎
虚拟机字节码执行引擎
类加载综合示例
Tomcat:正统的类加载器架构
OSGi:灵活的类加载器架构
字节码生成技术与动态代理的实现
Backport工具:Java的时光机
案例分析
目标与思路
实现与验证
实战:自己动手实现远程执行功能
类加载及执行子系统的案例与实战
Javac的源码与调试
词法和语法分析
填充符号表
解析与填充符号表
注解处理器
标注检查
数据及控制流分析
解语法糖
字节码生成
语义分析与字节码生成
Javac编译器
Java与C#的泛型
泛型的历史背景
类型擦除
值类型与未来的泛型
泛型
自动装箱,拆箱与遍历循环
条件编译
Java语法糖的味道
实战目标
代码实现
运行与测试
其他应用案例
实战:插入式注解处理器
前端编译与优化
代码执行模式
即时编译器实现
解释器与编译器
热点代码
热点探测
方法调用计数器
回边计数器
编译对象与触发条件
编译过程
即时编译器(JIT)
提前编译的优劣得失
实战:Jaotc的提前编译
提前编译器
优化技术概览
方法内联
逃逸分析
公共子表达式消除
数组边界检查消除
编译器优化技术
历史背景
构建编译调试环境
JVMCI编译器接口
代码中间表示
代码优化与生成
实战:深入理解Graal编译器
后端编译与优化
架构组成
CPU读取存储器数据过程
多CPU架构
缓存一致性问题
指令重排序问题
多线程存在的问题
硬件的效率与一致性
主内存与工作内存
JMM与JVM模型的联系
JMM与硬件内存架构的关系
内存间交互的8个操作
同步规则
内存间交互操作
可见性
原子性
有序性
可见性原子性与有序性问题
现行发生原则
Java内存模型(JMM)
重排序导致的可见性问题
重排序的规则
as-if-serial语义
解决指令重排序导致的可见性问题
指令重排序
保证可见性
禁止指令重排序优化
volatile的语义(用处)
volatile无法保证原子性
synchronized和volatile的区别
拓展问题
volatile
内存屏障
内核线程的实现
用户线程的实现
混合实现
Java线程的实现
线程的实现
Java线程调度
Java与线程
内核线程的局限性
协程的复苏
Java的解决方案
Java与协程
Java内存模型与线程实现
不可变
绝对线程安全
相对线程安全
线程兼容
线程对立
Java语言中的线程安全
互斥/阻塞同步
非阻塞同步
无同步方案
线程安全的实现方法
线程安全
自旋锁与自适应自旋
锁消除
锁粗化
轻量级锁
偏向锁
内置锁优化升级过程
锁膨胀后的优化
内置锁优化
线程安全与内置锁优化
其他
Java-JVM
![消息队列与RocketMQ总结](https://www.processon.com/chart_image/template/thumb/66d1d92e9283df7d22da1303.png?tid=66a0f1c6ff6f0123d8abdca0)
收藏
![深入理解Java虚拟机知识图谱](https://www.processon.com/chart_image/template/thumb/66a25c6348fa7b0295e7aff0.png?tid=6666facd58a2f04e369bd64a)
收藏
0 条评论
回复 删除
下一页