你好!欢迎来到《深入理解和实践JVM、反射和内省技术》这门体系课。在Java开发者的成长路径中,JVM往往是一座既令人敬畏又必须跨越的高山。很多人停留在使用层面,对“为什么”知之甚少,而本课程旨在带你穿透代码表象,直击Java虚拟机的核心机制,让你不仅会写代码,更懂代码如何在底层运行。

课程首先从宏观视角入手,通过“总览全局”和“讲讲Java虚拟机的故事”两讲,帮你建立起对JVM演进而来的整体认知框架。但这只是起点,真正的硬仗在于“动手”。我们将挑战编译OpenJDK源码,从Linux到Windows平台,通过六次详细的编译与调试实战,你将亲手触碰虚拟机的源头。这不仅是一次技术演练,更是为了消除对源码的恐惧,让你在面对未来复杂问题时,拥有溯源和排查的底气。

接下来,课程深入JVM的内部世界。在内存空间划分章节,我们将层层剥茧,解析堆、栈、方法区等核心区域的职责与交互。理解内存布局是性能优化的基石,随后我们会聚焦于“对象的创建细节”与“对象布局”,从内存分配的策略到指针碰撞与空闲列表的技术选型,再到对象头中的锁状态与哈希码存储,每一个细节都关乎着系统的吞吐量与延迟。你还将学习到JVM如何高效定位对象,这是垃圾回收的前提。

当然,理解理论的最佳方式是“破坏”它。我们将通过五个实战场景,亲手制造并分析OOM(OutOfMemoryError)异常。你会亲眼看到栈溢出、堆溢出以及元空间溢出的不同表现,这种“实战派”的学习方式能让你在遭遇生产环境故障时迅速定位根源。

课程的另一大核心是垃圾收集。我们从引用计数算法的缺陷讲起,重点剖析可达性分析算法这一现代GC的理论基础。随后,我们将逐一拆解Serial、ParNew、Parallel Scavenge、CMS等经典收集器的工作原理、适用场景及其优缺点。配合GC日志的深度解读,你将学会如何通过日志监控虚拟机的健康状态,制定合理的内存分配策略。

最后,课程延伸至反射和内省技术,这是框架设计的灵魂。结合JVM的深层理解,你将掌握如何通过反射机制在运行时动态获取类信息、调用方法,以及如何通过内省操作JavaBean属性。这些技术不仅是Spring、MyBatis等主流框架的底层支撑,也是你实现通用性组件、进行高级编码的必备技能。

本课程不仅是一堂JVM原理课,更是一次从源码编译到故障排查、从内存管理到动态编程的全方位进阶训练。无论你是希望夯实基础应对面试,还是渴望提升系统调优能力解决线上难题,这门课都将为你提供扎实的理论依据和丰富的实战经验。准备好了吗?让我们一起深入Java虚拟机的黑盒,揭开其神秘面纱。

课程目录

课程目录163 集
  • 1 总览全局式的了解Java (18:38).mp4
  • 2 讲讲Java虚拟机的故事 (47:43).mp4
  • 3 编译OpenJDK源码1 (16:10).mp4
  • 4 编译OpenJDK源码2 (22:56).mp4
  • 5 跟踪调试OpenJDK里的源码 (32:22).mp4
  • 6 Win平台上编译OpenJDK源码1 (20:42).mp4
  • 7 Win平台上编译OpenJDK源码2 (13:30).mp4
  • 8 Win平台上编译OpenJDK源码3 (08:37).mp4
  • 9 Win平台上编译OpenJDK源码4 (20:14).mp4
  • 10 Win平台上编译OpenJDK源码5 (10:03).mp4
  • 11 JVM对内存空间的划分概述1 (26:38).mp4
  • 12 JVM对内存空间的划分概述2 (25:18).mp4
  • 13 JVM对内存空间的划分概述3 (37:56).mp4
  • 14 JVM对内存空间的划分概述4 (25:20).mp4
  • 15 JVM对内存空间的划分概述5 (24:24).mp4
  • 16 JVM中创建对象的细节过程 (29:40).mp4
  • 17 JVM中对象的布局 (22:27).mp4
  • 18 JVM中定位对象的方式 (05:56).mp4
  • 19 实战OOM异常的场景1 (17:40).mp4
  • 20 实战OOM异常的场景2 (24:44).mp4
  • 21 实战OOM异常的场景3 (12:53).mp4
  • 22 实战OOM异常的场景4 (28:09).mp4
  • 23 实战OOM异常的场景5 (23:52).mp4
  • 24 垃圾收集器与内存分配策略概述 (18:32).mp4
  • 25 引用计数算法和GC日志1 (27:52).mp4
  • 26 引用计数算法和GC日志2 (17:37).mp4
  • 27 可达性分析算法 (37:49).mp4
  • 28 方法区的垃圾收集 (15:41).mp4
  • 29 垃圾收集算法1 (17:26).mp4
  • 30 垃圾收集算法2 (37:39).mp4
  • 31 串行收集器 (22:36).mp4
  • 32 ParNew收集器 (11:56).mp4
  • 33 PS等几个老年代收集器 (29:22).mp4
  • 34 CMS收集器1 (25:14).mp4
  • 35 CMS收集器2 (35:50).mp4
  • 36 G1收集器1 (18:37).mp4
  • 37 G1收集器2 (35:00).mp4
  • 38 G1收集器3 (32:03).mp4
  • 39 G1收集器4 (42:46).mp4
  • 40 G1收集器5 (23:37).mp4
  • 41 最近的收集器 (29:01).mp4
  • 42 选择垃圾收集器的理论基础 (12:34).mp4
  • 43 实战内存分配与回收策略1 (25:13).mp4
  • 44 实战内存分配与回收策略2 (28:18).mp4
  • 45 实战内存分配与回收策略3 (08:40).mp4
  • 46 JVM监控工具jps和jst (26:01).mp4
  • 47 认识压缩类空间和jinfo工具 (24:47).mp4
  • 48 JVM工具jmap和jstack (35:35).mp4
  • 49 JVM工具jcmd (12:20).mp4
  • 50 JVM可视化调试工具的简介 (17:03).mp4
  • 51 JVM可视化工具jhsdb (43:35).mp4
  • 52 JVM可视化工具jconsole (32:29).mp4
  • 53 JVM可视化工具visualvm的认识 (29:34).mp4
  • 54 工具visualvm做性能分析 (22:43).mp4
  • 55 BTrace工具的初步使用 (25:01).mp4
  • 56 JMC的简介 (12:21).mp4
  • 57 大内存硬件部署程序的策略 (21:06).mp4
  • 58 JVM调优的经典案例2-4 (27:27).mp4
  • 59 JVM调优经典例子5-6以及调优总结 (31:44).mp4
  • 60 JVM调优Eclipse启动实战 (39:48).mp4
  • 61 Class文件的结构概述 (21:52).mp4
  • 62 Class文件的魔数和版本 (14:27).mp4
  • 63 Class文件的常量池1 (27:49).mp4
  • 64 Class文件的常量池2 (26:57).mp4
  • 65 访问标志与类索引与父类索引与接口索引集合 (24:35).mp4
  • 66 Class文件的字段表 (25:28).mp4
  • 67 Class文件的方法表 (17:59).mp4
  • 68 Class文件的属性表概述 (11:35).mp4
  • 69 属性表的Code属性1 (34:58).mp4
  • 70 属性表的Code属性2 (22:32).mp4
  • 71 属性表的Code属性3 (18:33).mp4
  • 72 Exceptions属性 (08:18).mp4
  • 73 LineNumberTable属性 (16:12).mp4
  • 74 LocalVariableTable属性 (25:32).mp4
  • 75 SourceFile属性 (11:03).mp4
  • 76 ConstantValue属性 (11:02).mp4
  • 77 第7到9个属性 (08:48).mp4
  • 78 第10和11个属性 (33:04).mp4
  • 79 第12和13个属性简介 (18:06).mp4
  • 80 属性表剩下的一些属性简介 (17:30).mp4
  • 81 字节码指令基础知识1 (21:57).mp4
  • 82 字节码指令基础知识2 (17:15).mp4
  • 83 字节码指令基础知识3 (11:23).mp4
  • 84 字节码指令基础知识4 (15:34).mp4
  • 85 Java虚拟机类加载机制概述1 (19:48).mp4
  • 86 Java虚拟机类加载机制概述2 (24:36).mp4
  • 87 类加载中的加载阶段 (25:52).mp4
  • 88 类加载中的验证阶段 (34:05).mp4
  • 89 类加载中的准备阶段 (16:33).mp4
  • 90 类加载中的解析阶段1 (21:36).mp4
  • 91 类加载中的解析阶段2 (23:11).mp4
  • 92 类加载中的解析阶段3 (16:59).mp4
  • 93 类加载中的初始化阶段 (28:14).mp4
  • 94 类加载器1 (31:49).mp4
  • 95 类加载器2 (28:13).mp4
  • 96 类加载器3 (15:38).mp4
  • 97 类加载器4 (21:21).mp4
  • 98 类加载器5 (27:37).mp4
  • 99 模块化系统 (36:37).mp4
  • 100 虚拟机字节码执行引擎概述 (21:56).mp4
  • 101 局部变量表1 (25:01).mp4
  • 102 局部变量表2 (10:44).mp4
  • 103 操作栈 (16:58).mp4
  • 104 栈帧信息 (17:12).mp4
  • 105 方法调用1 (25:36).mp4
  • 106 方法调用2 (20:36).mp4
  • 107 方法调用3 (31:29).mp4
  • 108 方法调用4 (28:10).mp4
  • 109 动静态类型语言的区别 (30:29).mp4
  • 110 动态方法调用指令的技术背景 (12:35).mp4
  • 111 如何使用invoke包里的方法句柄 (27:46).mp4
  • 112 invokedynamic指令 (29:23).mp4
  • 113 实战方法分派 (31:49).mp4
  • 114 基于栈的字节码解释执行引擎1 (29:26).mp4
  • 115 基于栈的字节码解释执行引擎2 (15:24).mp4
  • 116 分析Tomcat的类加载器架构1 (22:07).mp4
  • 117 分析Tomcat的类加载器架构2 (34:19).mp4
  • 118 静态代理类实现 (31:34).mp4
  • 119 动态代理类实现1 (27:05).mp4
  • 120 动态代理类实现2 (21:11).mp4
  • 121 实战实现热远程代码的执行1 (23:34).mp4
  • 122 实战实现热远程代码的执行2 (31:54).mp4
  • 123 实战实现热远程代码的执行3 (23:10).mp4
  • 124 前端编译的名词概念1 (24:42).mp4
  • 125 前端编译的名词概念2 (26:13).mp4
  • 126 Javac编译器的编译过程1 (27:04).mp4
  • 127 Javac编译器的编译过程2 (28:27).mp4
  • 128 Javac编译器的编译过程3 (18:28).mp4
  • 129 Javac编译器的编译过程4 (33:05).mp4
  • 130 一个失败的语法糖泛型 (44:03).mp4
  • 131 其他语法糖 (10:39).mp4
  • 132 实战插入式注解处理器1 (27:50).mp4
  • 133 实战插入式注解处理器2 (36:21).mp4
  • 134 实战插入式注解处理器3 (23:14).mp4
  • 135 实战插入式注解处理器4 (40:05).mp4
  • 136 实战插入式注解处理器5 (39:10).mp4
  • 137 实战插入式注解处理器6 (16:38).mp4
  • 138 解释器与编译器 (37:54).mp4
  • 139 编译对象与触发条件1 (25:42).mp4
  • 140 编译对象与触发条件2 (11:57).mp4
  • 141 编译过程 (23:46).mp4
  • 142 实战及时编译器进行编译1 (34:37).mp4
  • 143 实战及时编译器进行编译2 (37:26).mp4
  • 144 了解提前编译 (36:15).mp4
  • 145 实战Jaotc提前编译 (24:28).mp4
  • 146 编译优化技术概述 (22:42).mp4
  • 147 方法内联 (24:29).mp4
  • 148 逃逸分析 (33:48).mp4
  • 149 后面两种优化技术 (19:27).mp4
  • 150 Java内存模型与线程1 (29:39).mp4
  • 151 Java内存模型与线程2 (32:21).mp4
  • 152 Java内存模型与线程3 (38:57).mp4
  • 153 Java内存模型与线程4 (23:21).mp4
  • 154 Java内存模型与线程5 (34:12).mp4
  • 155 Java内存模型与线程6 (17:25).mp4
  • 156 线程安全 (17:50).mp4
  • 157 锁优化 (39:58).mp4
  • 158 反射的概述 (24:19).mp4
  • 159 反射的使用1 (27:51).mp4
  • 160 反射的使用2 (23:26).mp4
  • 161 反射的使用3 (34:37).mp4
  • 162 反射的使用4 (33:17).mp4
  • 163 内省技术的使用 (24:09).mp4