连续仨月霸占牛客榜首!京东T8呕心巨作:700页JVM虚拟机实战手册
什么是Java虚拟机
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
这种解释应该算是正确的,但是只描述了虚拟机的外部行为和功能,并没有针对内部原理做出说明。一般情况下我们不需要知道虚拟机的运行原理,只要专注写java代码就可以了,这也正是虚拟机之所以存在的原因--屏蔽底层操作系统平台的不同并且减少基于原生语言开发的复杂性,使java这门语言能够跨各种平台(只要虚拟机厂商在特定平台上实现了虚拟机),并且简单易用。这些都是虚拟机的外部特性,但是从这些信息来解释虚拟机,未免太笼统了,无法让我们知道内部原理。
而借此机会呢团长找到了一份从入门到基础的一份手册,现分享给大家!
第一部分
本部分将重点讲述Java技术体系所囊括的内容,以及Java的历史、 现状和未来的发展趋势。
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999973/v2-1f1fd489088e577839969ecbcc795f6c_720w.png)
编辑
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999987/v2-d9d822dbed487d11f8487874c7eed2a0_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
第二部分
讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999907/v2-82de5f9a66cce275172d9727269de143_720w.png)
编辑
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999939/v2-9eecd28b553364042c3ec676542e5251_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999939/v2-646ee194fa6fe9c32b00b282090536fe_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000037/v2-bcab970249a78c354d81aebabc98991c_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999979/v2-13e926367989b98acc8027faadf096e2_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
第三部分
分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999909/v2-3f56b0a4b5baf62c51e6f4790a8bf5dc_720w.png)
编辑
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000040/v2-17a3f503522fcdc7913eb7ea028ae30e_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999986/v2-5c35149be279c71dcb2a4f1b48149a6a_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000049/v2-b800cfa37486cf98369da24954aff3c5_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000062/v2-b78518dc54e9618e30865288ba68ab49_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
第四部分
Java程序从源码编译成字节码,再从字节码编译成本地机器码的这两个过程,从整体来看其实等同于一个传统编译器所执行的编译前端、后端过程。
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999888/v2-10ffca90a1e4b091727add93e5eb26fe_720w.jpg)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999938/v2-4da32ab449c8bdde4d8af5afac38240a_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000049/v2-7aa723acdd8154d54723c8bd6a80e02b_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
第五部分
Java语言和虚拟机提供了原生的、完善的多线程支持,使得它天生就适合开发多线程并发的应用程序。不过我们不能期望系统来完成所有与并发相关的处理,了解并发的内幕也是成为一位高级程序员不可缺少的课程。
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651737999928/v2-610758e3a29bf8b387b9f28d64e7cdb6_720w.jpg)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000048/v2-f6810c4bf5e01a07092b5e05ce2fe104_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
![](https://uploadfiles.nowcoder.com/files/20220505/881374716_1651738000033/v2-c53129c9de8f8604417451c32045cb9f_720w.png)
编辑切换为居中
添加图片注释,不超过 140 字(可选)
结语
世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。