前言
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
JVM学习路线
今天给大家分享的是,阿里P7大牛整理的JVM底层技术文档+面试题+视频+46页PPT,内容有点多,所以只把部分知识点截图出来粗略的介绍一下,每个小节都有更加细化的内容,希望大家能够喜欢与理解。
深入理解Java虚拟机:JVM高级特性与最佳实践
本文一共分为五个部分:走近Java、自动内存管理、虚拟机执行子系统、程序编译与代码优化、高效并发。各个部分之间基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何一个感兴趣的专题开始阅读,但是每个部分各个章节间则有先后顺序。
这里并没有假定所有读者都在Java领域具备特别专业的技术水平,因此会在保证逻辑完整、描述准确的前提下,尽量用通俗的语言和案例去讲述虚拟机中与开发关系最为密切的内容。但是,本文毕竟是在探讨虚拟机的工作原理,不可避免地需要读者有一定的技术基础,而且本书的读者定位是中、高级程序员群体,对于一些常用的开发框架、Java类库API和Java语法等基础知识点,将假设读者已有所了解。
第1章介绍了Java技术体系过去、现在的情况以及未来的发展趋势,并在实践中介绍了如何自己编译一个OpenJDK 12。
第2章介绍了虚拟机中内存是如何划分的,哪部分区域、什么样的代码和操作可能导致内存溢出异常,并讲解了各个区域出现内存溢出异常的常见原因。
第3章介绍了垃圾收集的算法和HotSpot虛拟机中提供的几款垃圾收集器的特点及运作原理。通过代码实例验证了Java虛拟机中自动内存分配及回收的主要规则。
第4章介绍了随JDK发布的基础命令行工具与可视化的故障处理工具的使用方法。
第5章分享了几个比较 有代表性的实际案例,还准备了一个所有开发人员都能“亲身实战”的练习,希望读者能通过实践来获得故障处理和调优的经验。
第6章讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法,以实战的方式演示了Class的数据是如何存储和访问的。
第7章介绍 了类加载过程的“加载”验证”“准备”“解析”和“初始化”五个阶段中虚拟机分别进行了哪些动作,还介绍了类加载器的工作原理及其对虚拟机的意义。
第8章分析了虚拟机在执行代码时,如何找到正确的方法、如何执行方法内的字节码,以及执行代码时涉及的内存结构。
第9章通过几个类加载及执行子系统的案例,介绍了使用类加载器和处理字节码的一些值得欣赏和借鉴的思路,并通过一个实战练习加深读者对前面理论知识的理解。
第10章分析 了Java语言中泛型、主动装箱拆箱、条件编译等多种语法糖的前因后果,并实战练习了如何使用插入式注解处理器来完成一-个检查程序命名规范的编译器插件。
第11章,讲解了虛拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析即时编译的数据和结果,还选择了几种常见的编译期优化技术进行讲解。
第12章讲解 了虚拟机Java内存模型的结构及操作,以及原子性、可见性和有序性在Java内存模型中的体现;介绍了先行发生原则的规则及使用,以及线程在Java语言之中是如何实现的;还提前介绍了目前仍然在实验室状态的Java协程的相关内容。
第13章介绍了线程安全所涉及的概念和分类、同步实现的方式及虚拟机的底层运作原理,并且介绍了虚拟机实现高效并发所做的一系列锁优化措施。
揭秘Java虚拟机:JVM设计原理与实现
本文从源码角度解读HotSpot的内部实现机制,本版本主要包含三大部分一-JVM数据结构设计 与实现、执行引擎机制及内存分配模型。
数据结构部分包括Java字节码文件格式、常量池解析、字段解析、方法解析。每一部分都给出详细的源码实现分析,例如字段解析一章,从源码层面详细分析了Java字段重排、字段继承等关键机制。再如方法解析一章,给出了Java多态特性在源码层面的实现方式。
本文通过直接对源代码的分析,从根本上梳理和澄清Java领域中的关键概念和机制。
执行引擎部分包括Java方法调用机制、栈帧创建机制、指令集架构与解释器实现机制。这一话题是全文技术含量最高的部分,需要读者具备- -定的汇编基础。不过千万不要被“汇编”这个词给吓着,其实在作者看来,汇编相比于高级语言而言,语法非常简单,语义也十分清晰。执行引擎部分重点描述Java源代码如何转换为字节码,又如何从字节码转换为机器指令从而能够被物理CPU所执行的技术实现。同时详细分析了Java函数堆栈的创建全过程,在源码分析的过程中,带领读者从本质上理解到底什么是Java函数堆栈和栈帧,以及栈帧内部的详细结构。
JVM面试专题及答案
-
内存模型以及分区,需要详细到每个区放什么。
-
堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。
-
对象创建方法,对象的内存分配,对象的访问定位。
-
GC 的两种判定方法:
-
SafePoint 是什么
-
GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
-
GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
-
Minor GC 与 Full GC 分别在什么时候发生?
-
几种常用的内存调试工具:jmap、jstack、jconsole、jhat
- 类加载的几个过程:
11.JVM 内存分哪几个区,每个区的作用是什么?
12.如和判断一个对象是否存活?(或者 GC 对象的判定方法)
13.简述 java 垃圾回收机制?
14.java 中垃圾收集的方法有哪些?
15.java 内存模型
16.java 类加载过程?
-
简述 java 类加载机制?
- 类加载器双亲委派模型机制?
19.什么是类加载器,类加载器有哪些?
20.简述 java 内存分配与回收策率以及 Minor GC 和Major GC
46页PPT
技术文档+面试题+视频+PPT总览
本文从技术文档到视频再到PPT做了一个完美的整理,大家再也不用为学习JVM而发愁了。
需要领取的小伙伴,可以转发关注之后,↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓