这就是实力!京东资深架构师用实例详解Java虚拟机(源码剖析)

news/2024/10/18 23:49:25/

前言

Java是一门流行多年的高级编程语言,与其相关的就业岗位很多,但是最近几年却出现了用人单位招不到合适的人,而大量Java程序员找不到工作的尴尬局面。究其根本原因是岗位对Java开发技术的要求高,不但要会应用,而且更要懂其内部的运行原理。对于想要深入研究Java技术的从业人员来说,虚拟机是绕不开的话题。目前国内市场上还鲜见一本全面、 细致、深入剖析Java虚拟机源码的书籍,这正是本书要填补的市场空白

本书着重于Java虚拟机HotSpot的源码分析。开篇先从源码的构建开始讲解,然后逐步深入介绍HotSpot的类的加载机制、对象的二分模型和Serial垃圾收集器等相关知识。本书内容丰富,讲解循序渐进,除了翔实的源码剖析外,还结合大量图示和实例帮助读者深入理解相关知识,对于想对Java虚拟机底层技术感兴趣的开发人员有较高的参考价值。

目录

由于篇幅限制,笔记无法全部为大家展示出来,就以截图主要内容的形式让大家参考,深入剖析Java虚拟机原文档见文末

第1章 认识HotSpot VM

目前主流的Java虚拟机包括HotSpot、J9和Zing等,其中,HotSpot是目前使用范围最广 的虚拟机。本书将针对HotSpot虚拟机的实现原理进行详细介绍。

第2章 二分模型

HotSpot采用oop-Klass模型表示Java的对象和类。oop(ordinary object pointer)指普通 的对象指针,Klass表示对象的具体类型。

为何要设计一个一分为二的对象模型呢?这是因为HotSpot的设计者不想让每个对象中 都含有一个vtable(虚函数表),所以就把对象模型拆成Klass和oop。其中,oop中不含有任 何虚函数,自然就没有虚函数表,而Klass中含有虚函数表,可以进行方法的分发。

第3章 类的加载

第二章介绍了Java类在HotSpot VM中的表示,本章重点介绍类的加载过程。类的加载 就是将Class文件加载到HotSpot VM的内存中,通过Klass和ConstantPool等实例保存Class文 件中的元数据信息,以方便虚拟机运行Java方法,并执行反射等操作。

第4章 类与常量池的解析

第3章在介绍类的双亲委派机制时,多次涉及对ClassFileParser类中的parseClassFile()函 数的调用。因为类的加载不仅仅是找到类对应的Class文件,更要解析出Class文件中包含的 信息,然后将其转换为HotSpot VM的内部表示方式,这样虚拟机在运行的过程中才能方便 地操作。

第5章 字段的解析

在ClassfileParser::parseClassFile()函数中解析完常量池后,接着调用parser_fields()函数解 析字段信息。代码如下:

源代码位置:openjdk/hotspot/src/share/vm/classfile/classFileParser.cpp
u2 java_fields_count = 0;
FieldAllocationCount fac;
Array<u2>* fields = parse_fields(class_name,access_flags.is_interface(),
&fac, &java_fields_count,CHECK_(nullHandle));

本章将详细介绍parse_fields()函数解析字段的具体实现过程。

第6章 方法的解析

在ClassfileParser::parseClassFile()函数中解析完字段后,接着会调用parser_methods()函数 解析Java中的方法。调用语句如下:

bool has_final_method = false;
AccessFlags promoted_flags;
promoted_flags.set_flags(0);
Array<Method*>* methods = parse_methods(access_flags.is_interface(),&promoted_flags,&has_final_method,&has_default_methods,CHECK_(nullHandle));

本章将详细介绍parse_methods()函数解析Java方法的过程。

第7章 类的连接与初始化

类的生命周期可以分为5个阶段,分别为加载、连接、初始化、使用和卸载,如图所 示。

类的加载过程包括加载、连接和初始化三个阶段。在第3章至第6章中已经介绍了加载阶 段,此时已经成功将Class文件中的元数据信息转换成了C++内部的表示形式。本章将详细介 绍类的连接和初始化阶段,类的连接具体包括对类的验证、准备和解释。

第8章 运行时数据区

HotSpot VM在执行Java程序的过程中,为了满足各种不同需求会将内存划分为若干个 不同的运行时数据区。主要的数据区有堆空间、栈空间和直接内存。本章将详细介绍这3个 数据区。

第9章 类对象的创建

类的生命周期可以分为5个阶段,分别为加载、连接、初始化、使用和卸载。前几章介 绍了类的加载、连接和初始化阶段,本章将介绍类对象的创建、引用和回收过程。

第10章 垃圾回收

HotSpot VM可以自动管理内存,它在内存中划出一块区域用来给Java程序分配内存, 在释放时,通过垃圾收集器回收那些不再使用的对象,有效减轻了Java应用开发人员的负 担,也避免了更多内存泄漏的风险。

本章将简单介绍HotSpot VM垃圾回收中涉及的算法与相关的垃圾收集器,不进行源代 码分析,后几章会对HotSpot VM的垃圾回收及内存管理进行详细的源代码解读。另外,本 章还会介绍安全点的相关知识,它是系统为了配合垃圾回收而做的工作,垃圾回收任务必须 在安全点下执行内存回收。

第11章 Serial垃圾收集器

Serial收集器是一个单线程的收集器,采用“复制”算法。“单线程”并不是说只使用一个CPU或一条收集线程去完成垃圾收集工作,而是指在进行垃圾收集时,必须暂停其他的工作 线程,直到收集结束。本章将详细介绍Serial垃圾回收的具体实现过程。

第12章 Serial Old垃圾收集器

Serial Old垃圾收集器虽然是老年代收集器,但是在收集老年代对象的同时也会回收年轻 代对象。Serial Old垃圾收集器所使用的垃圾回收算法是标记-压缩-清理算法。在回收阶段,

Serial Old垃圾收集器会将标记对象越过堆的空闲区移动到堆的另一端,所有被移动的对象的 引用也会被更新并指向新的位置。本章将详细介绍各种阶段的实现过程。

第13章 Java引用类型

Serial Old收集器在全部回收老年代对象的同时也会回收年轻代对象。Serial Old收集器所 使用的垃圾回收算法是标记-压缩-清理算法。在回收阶段,Serial Old将标记对象越过堆的空 闲区移动到堆的另一端,所有被移动的对象的引用也会被更新为指向新的位置。本章将详细 介绍各种阶段的实现过程。

本书主要面向想要深入学习和研究Java语言运行原理的人,尤其是正在从事或将来想要从事虚拟机开发的编程人员。另外,本书还非常适合Java求职人员阅读,可以帮助他们系统掌握虚拟机的相关知识,从而游刃有余地应对相关公司招聘时的考查。


http://www.ppmy.cn/news/420590.html

相关文章

软件I2C通信的设计要点

IIC设计要点&#xff1a; 多多借助逻辑分析仪&#xff0c;可以快速定位和解决问题。注意当从机是芯片模拟的IIC时序&#xff0c;从机可能由于处理反应较慢的原因&#xff0c; 容易出现将总线stretch的现象&#xff0c; 就是从机会一直将总线的时钟线一直拉低。例如&#xff1a…

win10无法打开 巫师3 等steam游戏

解决方法: win10后台给你自动安装的nvida驱动程序有问题,自己下载驱动人生活着无官网下载对应驱动重新安装; 可以看到,win10自己安装的nvide驱动,在桌面右键看不到nvida控制面板,但是自己手动安装的就可以看到控制面板

巫师三

一个喜欢 lol 吃鸡的游戏轻度玩家表示 巫师三太无聊了. 建议购买的都看看别人玩的视频,慎重购买...

谈谈玩游戏遇到的问题(巫师3)

1.《巫师3》运行时报错&#xff1a; GPU does not meet minimal requirements Support for DirectX11 is required 很多人说是显卡问题&#xff0c;但现在玩这个的都是好电脑&#xff0c;不会是显卡问题&#xff0c;而是directx11与12不对应的问题&#xff0c;把系统的配置替换…

巫师3怎么释放替换法印_《巫师3:狂猎》无法释放法印是什么原因?解决方法是什么...

阿尔德之印&#xff0c;发起起的冲击波&#xff0c;在战斗中能够将敌人击退或者击飞&#xff0c;跑图的时候能振开某些破损的墙壁&#xff0c;门板或者树木&#xff0c;还可以用来灭火(不管是篝火还是被点燃的敌人身上的火)&#xff0c;在DLC血与酒完成新的突变诱发后可以学习阿…

巫师3计算机,游戏巫师3电脑配置要求是什么

《巫师3&#xff1a;狂猎》是由CD Projekt RED制作的一款角色扮演类游戏。该作承接《巫师2&#xff1a;国王刺客》的剧情&#xff0c;采用非线性剧情的设定&#xff0c;玩家将扮演猎魔人杰洛特在无缝的世界里任意探索&#xff0c;获得更加真实的体验与完完全全的代入感。下面就…

巫师3储物箱在哪_巫师3全宝藏宝箱地图分享 各种宝藏的具体位置

《巫师3》游戏中的宝藏宝箱将会是这款游戏中的重要收集元素之一&#xff0c;这里将给大家分享一张地图&#xff0c;从这张地图中我们可以非常清晰明了的发现各种宝藏的具体位置。 大家对这个锁定系统和战斗状态系统有什么认识&#xff1a; 遇到怪就进入“战斗状态”&#xff0c…

android装备选择,巫师三前期必拿装备武器_巫师三前期必拿最强装备推荐选择_攻略...

巫师三狂猎是巫师系列游戏的第三部&#xff0c;游戏是根据小说改编而来&#xff0c;既有小说的剧情又有精美逼真的游戏画面&#xff0c;曾获奖无数&#xff01;第三部的游戏剧情是讲主人公杰洛特(猎魔人)的最终冒险。游戏以战斗为主&#xff0c;并结合主线任务和支线任务&#…