中国有句古话说到:练拳不练功,到老一场空。
对于一个写代码的人来说,基本功同样也是非常重要。
《深入理解Java虚拟机》作为我们Java程序员的必读书籍,相信大家很多都已经看过了。但是大多数同学都是止步于第一章,今天想跟大家一起找到一个正确的学习方式来学这本书。
如何学习?如果我们能够在学习之前就get到作者通过这本书希望告诉我们的要点有哪些,我们的学习就有了抓手,学习的过程就不会盲从。
作者再开始正文介绍之前也大致对于自己的书中的知识点进行了简单的罗列。我们正好在读书之前把这些要点作为今后学习的重中之重。这可能会是一个比较好的学习方式。
废话少说,开始列举
前言
为什么我们要学习Java虚拟机?
- 提升物理硬件的性能,并无法等比例的提升程序的运行性能和并发能力。
- 为了达到“所有硬件提供一致的虚拟平台”的目的,Java虚拟机牺牲了一部分硬件相关的性能特性。(ps:这也是第一点问题的原因所在)
- 如果开发人员不了解虚拟机诸多技术特性的运行原理,就无法写出最适合虚拟机运行和自优化的代码。
- 商用的高性能Java虚拟机都提供了相当多的优化参数和手段,帮助我们满足日常开发中对西鞥能和稳定性的要求。
因此学习Java虚拟机,是程序员成长之路上必然需要去越过的一道坎。
今天我们开始学习,让我们跟着作者的思路梳理一下我们的学习要点
第一部分:走进Java (1章)
主要了解Java的语言体系,发展趋势,知识面的扩充。
第二部分:自动内存管理(2-5章)
第2章
1、JVM 的内存是如何划分的。(列出自己学习的成果:脑图或结构图)
2、JVM的内存各个区域出现内存溢出异常的常见原因(整理罗列出来)
第3章
1、垃圾收集算法分类及特性。(弄懂并输出自己的学习成果)
2、Hotspot虚拟机中提供的几款垃圾收集器的特点 及 运作原理
3、ZGC和Shenandoah 两款低延迟全并发收集器的原理解析。(ps:这是未来垃圾收集器的发展方向)
4、Hotspot中垃圾收集器实现的几个关键技术点、解决跨代引用的记忆集与卡表、解决并发标记的增量更新 和 原始快照算法、内存读写屏障技术。
第4章
1、JDK发布的基础命令行工具 与 可视化的故障处理工具使用方法 主要是学会使用并实操.
2、JHSDB的使用讲解、JFR和JMC的工作原理和使用方法 的介绍,以及对部分JDK外部的工具(如JIT Watch)的简要介绍.
第5章
1、通过具体案例亲身实战练习
此处应该给出自己的练习收获,和在练习中用到的前面的知识点有哪些.做一个阶段性复盘
第三部分:虚拟机执行子系统(6-9章)
第6章(作者建议本章适合查阅多于适合阅读)
1、class文件结构中的各个组成部分。每部分的定义、数据结构和使用方法。(输出学习成果)
2、实战演示class的数据是如何存储和访问的。(注重这个过程)
class文件格式是虚拟机的基础知识。枯燥但是无法回避,除了一些常规知识外,我们还应该关注在jdk版本升级过程中,新引入的新概念新属性的实际作用、属性等。
第7章
1、(重要)类加载的过程:“加载”,“验证”,“准备”,“解析”,“初始化”。重点理解这五个过程JVM虚拟机分别进行了哪些动作。输出成果
2、类加载的工作原理 和 对于虚拟机的意义
3、jdk12版本中类加载各个过程的细节变动都有哪些,思考为什么要这么改变。
4、搞清楚Java模块化系统是什么,他是如何影响类加载部分的逻辑的。
第8章
1、虚拟机执行代码的过程。画出流程图或者时序图。
2、执行的细节:如何找到正确的方法,如何执行方法内的字节码,执行方法内的字节码时涉及到的内存结构有哪些
3、概括除Java虚拟机执行子系统的概念模型。整理出结构图
4、Java虚拟机对于动态类型语言的支持如何做到,在jdk 的不同版本中如何增强
第9章
1、通过类加载和执行子系统的实际案例,学习值的借鉴的思路。
2、通过一个实战练习加深对于之前的理论知识的理解。此处应该自己概括出来实战中用到的理论知识都有哪些。第二个复盘
3、弄清楚lambda表达式、模块化、动态语言这些新技术在我们的日常开发中的用法,这样用的好处。
第四部分 程序编译与代码优化(10-11章)
第10章
1、脑子里熟悉 Java程序从源码编译成字节码 从字节码编译成本地机器码 的两个过程。形成整体上的概念。作者认为这个过程实际上就是一个传统编译器所执行的编译前端、后端的过程。看完之后需要自己问自己,这个概念是否可以弄清楚。
2、Java中的泛型、主动拆箱、装箱、条件编译 这些语法糖的前因后果,这里需要分别列清楚他们的前因后果。写出来。
3、实战任务:完成使用插入式注解处理器来完成一个检车程序命名规范的编译器插件。
4、针对泛型:不同语言对于泛型的实现方式,Java泛型出现的历史背景 和 使用类型擦除来实现泛型所带来的一些限制。
5、未来可能在Java中出现的值类型有哪些?为什么未来需要这些类型的出现。
第11章
1、虚拟机的热点探测法
2、Hotspot的即时编译器、编译触发条件
3、如何从虚拟机外部观察和分析即时编译的数据和结果
4、弄清楚书中几种常见的编码期优化技术。
5、弄清楚 提前编译器是什么,Hotspot中新增加的Graal编译器是什么。
6、JVMCI接口是什么。重在通过编译器的实战内容来认识他。
第五部分:高效并发(12-13章)
Java语言 和 虚拟机 提供了原生的、完善的多线程支持,使得他天生就适合开发多线程并发的应用程序。但是了解并发的内幕和实现原理也是必不可少的。
第12章
1、通过Java内存模型的结构和操作,了解原子性、可见性和有序性这些特性在Java中的体现。
2、弄清楚先行发生原则的规则 和 使用。
3、Java语言如何实现了线程。
4、提前预习一下Java协程的新并发模型的内容
第13章
1、线程安全涉及到的概念 和 分类,需要自己画出脑图,整体出来清晰的逻辑脉络
2、Java中 同步的实现方式,以及虚拟机底层的运作原理。
3、虚拟机为了实现高效并发所做的一系列锁优化措施是什么,这些措施是如何实现的,解决的关键问题是什么?
以上就是周志明前辈 希望我们能够看到的关于Java虚拟机的一些要点内容,其中也加入了我自己的一些理解。希望我们可以通过这些问题关键点来学习这些专业底层知识,更好的理解更有效的掌握内容。
另外作者还为我们推荐了一些学好虚拟机需要阅读的书籍。
1、《Java虚拟机规范》
2、《Java语言规范》
3、《垃圾回收算法手册:自动内存管理的艺术》
4、《Java性能优化权威指南》
本文完。晚安朋友!
本文转载自: 掘金