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高级编程知识抽出一些专题来讲,当然短期内不会针对初学者的技术应用内容进行编写和发布,这些初学内容网上随便搜索,很多的,我更偏向于底层原理的内容输出,专注精品内容的文章。新的一年里,预祝大家春节快乐!事业有成!同时祝福所有职业人提升自升价值与竞争力,摆脱加班命运!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第2章 战略设计

第2章 战略设计 2-1 智慧零售案例项目介绍2-2 建模和设计的整体流程2-3 如何描述模型?从用户故事到通用语言2-4 SmartRM系统整体战略设计2-5 SmartRM通用语言文档2-6 分解问题:领域划分和子域2-7 确定系统最核心的部分:核心域和精炼2-8 分解模…

【Node-RED】node-red-contrib-opcua-server模块使用(2)

这里写自定义目录标题 前言示例简单介绍变量产生opcuaServe配置 地址空间的配置创建opcua服务器获取命名空间初始化变量定义文件夹定义文件夹中的变量view文件夹增加view文件夹中查阅信息定义最终效果 加密设置opcuaServe组件配置客户端配置 参考官网博文 前言 上期博文【Node…

零基础学编程,中文编程入门视频教程

零基础学编程,中文编程入门视频教程 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常用工具下载——编程工具免费版下载及实例源码下载。 如上图为编程工具构件…

c语言实战之贪吃蛇

文章目录 前言效果展示游戏用到的图片游戏思路一览游戏前准备一、贪吃蛇、食物、障碍物节点坐标的结构体二、枚举游戏状态、和贪吃蛇的方向三、维护运行的结构体 游戏开始前的初始化一、学习图形库相关知识二、设置背景三、欢迎界面四、初始化贪吃蛇五、生成障碍物六、生成食物…

Codeforces Round 811 (Div. 3)(VP-15,寒假加训)

A. 模拟 // Problem: A. Everyone Loves to Sleep // Contest: Codeforces - Codeforces Round 811 (Div. 3) // URL: https://codeforces.com/group/RAx5fiilkP/contest/1714/problem/A // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Editor (https…

SharedPreferences卡顿分析

SP的使用及存在的问题 SharedPreferences(以下简称SP)是Android本地存储的一种方式,是以key-value的形式存储在/data/data/项目包名/shared_prefs/sp_name.xml里,SP的使用示例及源码解析参见:Android本地存储之SharedPreferences源码解析。以…

【JAVA语言-第16话】集合框架(三)——Set、HashSet、LinkedHashSet、TreeSet集合的详细解析

目录 Set集合 1.1 概述 1.2 特点 1.3 HashSet集合 1.3.1 概述 1.3.2 哈希表 1.3.3 哈希值 1.3.4 练习 1.3.5 HashSet存储自定义类型元素 1.4 LinkedHashSet集合 1.4.1 概述 1.4.2 特点 1.4.3 练习 1.5 TreeSet集合 1.5.1 概述 1.5.2 练习 1.6 HashSet、Lin…

Pandas展开数据

def testExplode():df = pd.DataFrame({key: [A, B],data: [[1

【论文复现】

code: paper: 论文 介绍 方法 实验 结论 复现 Image generation 问题1:No models "dcface/dcface/pretrained_models/adaface_ir101_webface4m.ckpt Traceback (most recent call last):File "/data/dcface/dcface/src/r…

线性回归需要满足的几个假设

线性回归模型是基于一些假设构建的,这些假设有助于确保模型的有效性和可解释性。以下是线性回归需要满足的几个主要假设: 线性关系假设(Linearity): 线性回归假设因变量(目标变量)与自变量(特征…

如何通俗解释Docker是什么?

要想弄懂Docker,咱们得先从“容器化”讲起。 一、容器化技术及Docker的出现 容器化,它是一种轻量级、可移植的软件打包方式,你就想象成一个快递箱子,里面装着你的应用和所有需要运行的环境,这个箱子能在任何支持容器…

Redisson分布式锁介绍及实战应用(防止缓存击穿)

本地锁 浏览器把100w请求由网关随机往下传,在集群情况下,每台服务都放行10w请求过来,这时候每台服务都用的是本地锁是跨JVM的, 列如这些服务都没有49企业,此时有几个服务进行回原了打击在DB上面,那后期把这…

Blender教程(基础)-物体的移动、旋转与缩放-04

一、新建一个立方体 ShiftA新建一个立方体用来演示。 二、物体的移动 xyz轴移动 点击下图图左侧的移动选项后,选中要移动的物体,会出现三个箭头的方向,这分别代表沿着x、y、z轴移动。xyz平面移动 这个小正方体代表沿着某一个面移动&#…

AWS 专题学习 P14 (Security Encryption)

文章目录 专题总览为什么需要加密?AWS KMS(密钥管理服务)KMS 密钥类型AWS KMS(密钥管理服务)Copying Snapshots across regionsKMS Key Policies在不同账户之间复制快照KMS Multi-Region Keys (多区域密钥)DynamoDB 全…

ElasticSearch 学习笔记

基本概念 术语 文档(document):每条记录就是一个文档,会以 JSON 格式进行存储 映射(mapping):索引中文档字段的约束信息,类似 RDBMS 中的表结构约束(schema&#xff09…

在linux上进行编译调试

1.相关疑问 1. 为什么在代码里使用了一个未定义过的函数(如add()),在编译阶段不会报错,在链接阶段会报错呢? 答:先说几个代码编译的结论: 单个\.c源文件文件被编译成机器码文件时&#xff0c…

LVS 工作模式

1、LVS DR模式 DR 模式是通过改写请求报文的目标 MAC 地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。DR 模式可以极大的提高集群系统的伸缩性。但是要求调度器 LB 与真实服务器 RS 都有一块网卡连接到同一物理网段上…

Codeforces Round 785 C. Palindrome Basis

C. Palindrome Basis 题意 定义一个正整数 a a a 是回文的(没有前导 0 0 0)当且仅当: a a a 的十进制表示形式回文 给定一个正整数 n n n ,求出将 n n n 拆分成若干个回文数之和的方案数 思路 这是一个经典模型&#xff0…

媒体邀约:怎么吸引总体目标受众?

新闻媒体影响力日益扩大。不论是公司、机构还是其他,都希望能够通过新闻媒体的曝光来吸引更多总体目标受众。要想真正吸引住总体目标受众并非易事,需要一定的方案和方法。下面我们就深入探究媒体邀约推广的真相,共享怎么吸引总体目标受众的方…

秋招面试—计算机网络安全

2021 计算机网络安全 1.Get 和 Post 的区别 get 用于获取数据,post用于提交数据; get 的缓存保存在浏览器和web服务器日志中; get 使用明文传输,post请求保存在请求体中; get 长度限制在2048以内 2.常见的HTTP请…