Hotspot源码解析-第28章-终结篇章

第28章-终结篇章

经过前面27章的介绍,终于把Java虚拟机(hotspot)的运行流程和实现细节都走完了,相信能让读者对Java的运行机制和设计原理有一个全新的认识,众观全网及书籍,似乎没有一人这么系统的逐行对hotspot源码进行解析的,如果有,请读者指出,我也去学习下,哈哈。当然,由于本人能力所限,加之是个人编写且时间比较仓促(一个月出头),内容中难免会出现一些错误,也请读者指出,如经验证确实有误,定会及时修改并加以公布。同时,大家的点赞与关注,就是我更新的动力源泉,谢谢!

​ 从本书(毕竟这些内容不做出版,但实在想不到别的定义了,暂且称为书了)中,我们至少可以学到以下内容:

(1)Java虚拟机的运行流程和实现细节

(2)Java虚拟机的设计原理

(3)Java虚拟对内存的区域划分(堆、栈、程序计算数、元空间、本地方法栈,面试中常问)

(4)Java内存、虚拟机内存、内核内存之间的关系

(5)Java对象在Java虚拟机中的映射对象:InstanceKlass(普通类)、InstanceMirrorKlass(X类的Class类)

(6)内存在虚拟机中怎么分配(底层malloc、mmap等)

(7)Java虚拟机对内存的管理(主要通过链表将内存块管理起来)

(8)Java线程模型:Java线程的创建及与操作系统线程的创建和绑定

(9)虚函数表:vtable

(10)itable

(11)卡表

(12)其他

这里抛出几个问题:
问:每个Java类定义在虚拟机(C++)环境中是同样对应一个类定义还是一个对象?

答:Java类定义在C++中对应的是一个对象。

问:对应哪个对象?

答:普通类定义对应InstanceKlass对象,Class类定义对应InstanceMirrorKlass对象。

问:为什么不直接对应类,而对应对象?

答:因为虚函数表,在C++中,每个带virtual函数的类都有一个虚函数表,如果Java类与C++的类一一对应,那么会存在很多虚函数表,因虚函数表是要占用内存空间的,这个内存到时是非常可观的,所以Java类在C++中表现为对象,这就可以达到共用虚函数表的效果,节省空间。

写这本书的意义

​ 近二十年Java开发语言使用太广范了,又是开源的,入行的人越来越多,要求也越来越高,当然,技术水平也是参差不齐的。随之而来的也有各种各样封装好的框架可以使用,这就导致有些人写了10几年,甚至20年,也不知道底层原理,换个框架就玩不转;有些人三五年就搞透彻了,后面换什么框架都得心应手。前者好似练了10几年传统武术套路的人,到头来一场空,后者更像是练过九阳神功,亦或是打通任督二脉的人,即厉害,学习其他的“功夫”也快。

​ 那么编程技术中,什么是九阳神功呢?当然是底层原理,包括计算机组成原理、操作系统、编译原理、算法(有一定概念就行)、数据结构等,要了解上面的知识,又需要汇编语言、C/C++语言来打辅助,所以这些都是基础,一但学通,就可以打通任督二脉。

​ 对于Java编程者来说,Java虚拟机就是底层,何谓虚拟机,自然是在真正计算机的基础上虚拟一套仿真计算机,那必须是要具备真实计算机的功能,要虚拟出这么一套东西,自然需要对上面所提的九阳神功技术栈非常了解,那么读者能把这套虚拟的产品实现源码读明白,自然也就有一定九阳神功的功力了。真正做到知其然,而知其所以然,遇事不决时,底层功能就显得非常重要,毕竟网上搜索,答案十之有九是无用的,还有一成需要自行分辨,做技术是这样,做人也是这样,否则很容易被淹没在这浩瀚的信息海洋里。所以,这本书的意义就在于给喜欢研究底层人,打基础,同时可以帮助想研究hotspot源码,但又不知道怎么开头的人一些帮助;还可以帮助一些在研究过程中碰到问题,又没有人咨询,遇到阻碍,进行不下去了的人。当然,有人会说,Java语言未来可能会被其他语言代替,这个不假,但是JVM这一套理论与实现短期内是不可能被替代的,近几年出现的很多新的语言,都是在JVM的基础上执行的,再退一步讲,就算JVM没了,其他类似的解释器,比如Python/JS的解释器,实现原理也都差不多,所以不要局限于某种语言,原理很重要!!!

本书未讲部分

(1)类的加载过程:后续一定会讲

(2)Java虚拟的执行引擎:会部分讲

(3)GC实现细节:会抽一个GC收集器来讲

(4)编译:不讲,对大部分开发者来说,意义不大,知道概念就行

(5)Java优化技术:会讲一点

(6)Java高级技术的底层实现原理:锁、volatile、LockSupport、Unsafe等知识

这里列出的是五个大的模块,后面的专题文章中会选出一些来讲,但是短期内不会全讲,一来,我不是专门搞虚拟机研究的(我也要工作,否则要饿死);二来,为了做到雨露均沾,后面要出一些其他技术类的文章。

结束语

2024年春节前就封版了,不再做其他更新了,年后还会陆续更新其他源码内容,比如redis、Rocketmq、kafka、mybatis等等,同时也会对Java高级编程知识抽出一些专题来讲,当然短期内不会针对初学者的技术应用内容进行编写和发布,这些初学内容网上随便搜索,很多的,我更偏向于底层原理的内容输出,专注精品内容的文章。新的一年里,预祝大家春节快乐!事业有成!同时祝福所有职业人提升自升价值与竞争力,摆脱加班命运!!!

相关推荐

  1. Hotspot解析-28-终结篇章

    2024-01-30 15:34:03       35 阅读
  2. Hotspot解析-

    2024-01-30 15:34:03       38 阅读
  3. Hotspot解析-

    2024-01-30 15:34:03       39 阅读
  4. Hotspot解析-22-vtable和itable的重新初始化

    2024-01-30 15:34:03       37 阅读
  5. Hotspot解析-开篇

    2024-01-30 15:34:03       38 阅读
  6. -RocketMQ解析-基础模块

    2024-01-30 15:34:03       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-30 15:34:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-30 15:34:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-30 15:34:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-30 15:34:03       20 阅读

热门阅读

  1. 在Ubuntu环境下搭建小型化Git服务器

    2024-01-30 15:34:03       33 阅读
  2. 隐马尔可夫模型系列——(三)模型推断

    2024-01-30 15:34:03       33 阅读
  3. sftp上传下载文件

    2024-01-30 15:34:03       38 阅读
  4. 我们一起聊聊React列表渲染与Key

    2024-01-30 15:34:03       45 阅读
  5. 学习总结7

    2024-01-30 15:34:03       33 阅读
  6. 一文搞懂Linux查看log日志常用命令

    2024-01-30 15:34:03       26 阅读
  7. 超级自驱力——每个人都是自己的CEO

    2024-01-30 15:34:03       44 阅读
  8. Spring 学习2 --基于xml管理Bean

    2024-01-30 15:34:03       31 阅读
  9. 当量子计算机普及化:对未来生活方式的探讨

    2024-01-30 15:34:03       36 阅读