代码改变世界

尚硅谷宋红康JVM全套教程(详解java虚拟机)之2:字节码与类加载器篇

2021-12-12 12:16  cascle  阅读(378)  评论(0编辑  收藏  举报

一. class文件结构

204. JVM中篇内容概述

 

 

 

 

 

 

205. 字节码文件的跨平台性

 

 

 

 

 

 

 

 

 

 

 206. 了解Java的前端编译器

 

 

 

 

207. 透过字节码看代码执行细节举例1

 

 

 

 

 

 

 

208. 透过字节码看代码执行细节举例2

 

209. 透过字节码看代码执行细节举例3

 

先调用子类的print方法,print方法里的引用this是son ,其x为0;属性不存在多态性

 

210. 解读Class文件的三种方式

 

 

 

 

 

211. Class文件本质和内部数据类型

 

 

 

 

212. Class文件内部结构概述

 

 

 

 

 

 

 

 

 

 

213. 字节码数据保存到excel中的操作

先复制进txt里,换行分割每列简加逗号,拷到csv文件再拷贝到excel文件

 20替换成00

 

214. Class文件的标识:魔术

 

 

 

 

215. Class文件版本号

 

 

 

 

 

216. 常量池概述

 

 

 

 

 

 

 

 

 

 

217. 常量池计数器

 

 

 

常量池里有count个数值,默认索引0不可用 

 

 

 

218. 常量池表中的字面量和符号引用

 

 

 

 

 

 

 

 

219. 解析得到常量池中所有的常量

 

 

 

 

 

220. 常量池表数据的解读1

 

 

 

 

 

221. 常量池表数据的解读2

 

 

 

222. 常量池表项数据的总结

 

 

 

 

 

 

 

 

 

223. 访问标识

 

 

 

 

 

 

 

224. 类索引、父类索引、接口索引集合

 

 

 

 

 

 

225. 字段表集合的整体理解

 

 

 

 

 

226. 字段表数据的解读

 

 

 

 

 

 

 

 

 

 

 

 

 

227. 方法表集合的整体理解

 

 

 

 

 

228. 方法表数据的解读

 

 

 

 

 

 

 

229. 属性表集合的整理理解

 

 

 

 

 

230. 方法中Code属性的解读

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

231. LineNumberTable和LocalVariableTable属性的解读

 

 

 

 

 

 

 

 

232. SourceFile属性的解读

 

 

 

 

 

233. Class文件结构的小结

 

 

 

 

 

234. javac -g操作的说明

 

 

 

 

235. javap主要参数的使用

 

 

 

 

 

 

 

236. javap解析得到的文件结构的解读

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

237. javap使用小结

 

 

 

二. 字节码指令集与解析举例

238. 字节码指令集的概述

 

 

 

 

 

 

 

 

239. 指令与数据类型的关系及指令分类

 

 

 

 

 

240. 加载与存储指令概述

 

 

241. 再谈操作数栈与局部变量表

 

 

 

 

 

 

242. 局部变量压栈指令

 

 

 

 

  

243. 常量入栈指令

 

 

 

 

 

 

 

 

 

244. 出栈装入局部变量表指令

 

 

 

245. 算术指令及举例

 

 

 

 

 

 

 

 

 

 

 

 

246.算术指令再举例

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

247. 彻底搞定++运算符

 

 

 

 

 不涉及其他运算,没区别

 

 

+1与入栈顺序不一样,先入栈(保留旧值)再+1与先+1(直接改当前值)再入栈

 

 

 结果是10

 

 旧值先入栈保存+1后出栈覆盖

 

248. 比较指令的说明

 

 

249. 宽化类型转换

 

 

 

 

 

 

 

 

 

 

 

 

 

250. 窄化类型转换

 

 

 

 

 

 

 

 

 

 

251. 创建类和数据实例的指令

 

 

 

 

 

 

 

 

 

 

 

252.字段访问指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

253. 数组操作指令

 

 

 

 

 

 

 

 

 

254. 类型检查指令

 

 

 

 

 

255. 方法调用指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

256. 方法返回指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

257. 操作数栈管理指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

258. 比较指令

 

 

 

259. 条件跳转指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

260. 比较条件跳转指令

 

 

 

 

 

 

 

 

 

 

261. 多条件分支跳转指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 字符串比较,先hashcode再equals

 

262.无条件跳转指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

263. 抛出异常指令

 

 

 

 

 

 

 

 

 

 

 

264. 异常处理与异常表

 

 

 

 

 

 

 

 

 

 

 

265.同步控制指令

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三. 类的加载过程详解

 

 

 

266. 类的生命周期概述

 

 

 

 

 

 

 

 

267. 加载完成的操作及二进制的获取方式

 

 

堆中Class对象 ,指向方法区的类模板数据流

 

 

 

268.类模型及Class实例的位置

 

 

 

 

269. 链接之验证环节

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

270. 链接之准备环节

 

 

 

 

 

 

 

271. 链接之解析环节

 

 

 

 

 

 

 

 

272. 初始化过程与类初始化方法

 

 

 

 

 

273. 初始化阶段赋值与准备阶段赋值的对比

 

 

 

 

 

 

 

274. 类初始化方法clinit的线程安全性

 

 

 

275. 何为类的主动使用与被动使用

主动使用调用clinit方法,被动使用不会调用

 

 

276. 类的主动使用1

 实例

277. 类的主动使用2

 示例

278. 类的主动使用3

 示例

 

 

 

 

 

279. 类的主动使用4

 示例

 

280. 类的被动使用

 示例

 

281. 类的使用介绍

 

 

 

282. 类的卸载相关问题

 

 

 

 

 

 

 

 

 

 

四. 再谈类的加载器

283. 类的加载器概述

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

284. 命名空间与类的唯一性

 

 

 

 

 

285. 类的加载器的分类

 

 

 

 

 

286. 引导类加载器的说明

 

 

 

 

 

287. 扩展类加载器的说明

 

 

 

 

 

288. 系统类加载器的说明

 

 

 

289. 用户自定义类加载器的说明

 

 

 

290. 测试不同类使用的类加载器

 

 

 

 

291. ClassLoader与Launcher的初步剖析

 

 

 

 

292. ClassLoader的源码解析1

 

 

 

 

 

 

 

 

 

 

293. ClassLoader的源码解析2

 

 

 

 

 

 

 

294. ClassLoader子类的结构剖析

 

 

 

 

 

 

 

 

 

 

295. 双亲委派机制的优势与劣势

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

296. 三次双亲委派机制的破坏

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

297. 热替换的代码实现

 

 

 

 

 

 

 

 

 

 旧的classloader和由其加载的类不再使用,就完成了老类的替换。所以需要动态创建新的classloader并调用加载新类的方法。有这种”约定“需求就会要有标准

 

298. 沙箱安全机制

 

 

 

 

 

 

 

 

 

 

 

 

 

 

299. 自定义类加载器的好处和应用场景

 

 

 

 

 

 

 

 

 

300. 自定义类加载器的代码实现

 

 

 

301. Java9的新特性