JVM实现跨平台的关键因素:class文件和“翻译器”

news2024/10/8 18:31:44

文章目录

  • 前言
  • 关键因素:class文件
    • class文件格式说明
    • Java 源代码在class文件中的体现
    • 涉及到的知识点(面试题)
  • 关键因素:“翻译器”
    • 解释器
    • 即时编译器(JIT)
  • 总结

前言

当你通过上文对JVM有了初步的认识后,就需要关心JVM里面的内容了。

通过上文可以知道,JVM是Java实现跨平台特性的关键所在,并且支持近百种编程语言。JVM是如何做到这两点的?本文将对此进行说明。

关键因素:class文件

JVM可以实现跨平台并且支持近百种编程语言运行,最关键的因素就是.class。

  • 将class文件交给JVM,就不用考虑跨平台的问题了。
  • 任何编程语言只要编译成.class,都可以运行在JVM上。

可见class文件的重要性,所以,如果想要精通JVM,首先要了解class。

class文件格式说明

一个class文件格式是这样的

文件中定义了这个类的元数据和编译后的JVM指令。作用如下:

  • 在加载类文件时,这些元数据会被JVM校验和解析。
  • 编译后的JVM指令,最终会通过解释器或者即时编译转换成机器的本地指令。

这两点下面会重点说明。

Java 源代码在class文件中的体现

为了直观地理解class文件,下面通过一个示例展示源代码在class中的体现。

在这里插入图片描述

对上图内容做一个简单的解释说明:

  1. 图中的magic,硬编码为0xCAFEBABE,标识该文件是一个有效的Java类文件,在类加载时会对此进行校验
  2. 图中的constant_pool,是一些符号引用,在对该类解析时会转换为直接引用
  3. 图中的methods_count,是指该类有几个方法,methods[]则是每个方法的具体信息,这些信息中就包括具体的attributes,比如Code,即JVM指令。
    fields_countfields[]interfaces_countinterfaces[] 同理。

更详细的class文件说明,可以参考官方文档

涉及到的知识点(面试题)

前两点涉及到JVM一个重要的知识点:类加载机制。在面试时经常会被问到相关知识,比如什么是类加载机制?有哪些类加载器?什么是双亲委派机制?感兴趣的可以移步至《JVM面试》,有具体的说明。

这里简单说明下符号引用和直接引用。

什么是符号引用和直接引用?

符号引用就是上图constant_pool中的 #1 = Methodref #7 之类的内容,用来说明对象的引用(变量)和对象之间的关系,是一个静态的表示。

当程序运行时,对象是要加载到内存中的。所以,JVM运行时,会把对象的引用解析到实际的内存地址,也就是直接引用。

第三点中的JVM指令,如果想要了解的,可以移步至官方文档:

源代码编译后的JVM指令集示例

指令的格式及其执行的操作

指令操作码的助记符的映射

class文件通过类加载机制,最终会被加载到内存中,这块内存会被JVM管理,也就是运行时数据区。同样,感兴趣的可以移步至《》,有具体的说明。

关键因素:“翻译器”

JVM可以实现跨平台另一个关键因素就是“翻译器”:将字节码转化为机器指令。

在JVM中有两个“翻译器”,一个解释器,一个即时编译器。

解释器

JVM运行时,解释器会逐条读取字节码指令,然后将其“翻译”为本地指令并执行。

例如,JVM的new指令,可能会涉及到系统调用、内存读写指令等操作,大概这样。

在这里插入图片描述

由于每次执行字节码时都需要逐条翻译,所以,解释器这种方式执行效率比较慢。

即时编译器(JIT)

为了解决这一问题,JVM还提供了即时编译器(JIT)的方式。它的工作原理是这样的:

将“热点代码”直接翻译成本地机器码并缓存,在后续执行相同的代码段时,就可以直接使用缓存的本地机器码,避免了重复的解释过程,从而提高了执行效率。

注:JVM运行时,两者是同时存在的。

总结

如果想要精通JVM,对class文件的了解是必不可少的。因为class文件会涉及到类加载、类文件在JVM内存中的布局等知识。除此之外,在了解JVM指令和“翻译器”后,可以让你更清晰的认识Java编程语言从编码到运行的过程。

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

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

相关文章

【电路】1.3 电功率和能量

1.3 电功率和能量 电是一种能量存在形式。 1.3.1 电压的定义 将单位正电荷由A点移动至B点,电场力所做的功是 w w w,则 u A B d w d q u_{AB}\frac{dw}{dq} uAB​dqdw​, w w w是功, q q q是电荷量从A到B,沿着任意路…

Squid + Stunnel 配置

环境: 亚马逊服务器一台:3.26.80.132 华为云服务器一台:122.59.52.68 客户机一台: Win11 实现的需求:客户机通过设置华为云代理,实现透过亚马逊服务器上网 一、亚马逊服务器 1、安装Squid https://bl…

刚转Mac的新手如何卸载不需要的应用程序

最开始转Mac系统的时候很是苦恼,到底该怎么卸载App啊,App直接拖到废纸篓真的能卸载干净吗,卸载App时会不会留下一些文件残留,慢慢的会不会占满内存,于是我找到了一个免费的卸载工具——XApp。 这是一款Mac应用程序卸载…

《贪吃蛇小游戏 1.0》源码

好久不见&#xff01; 终于搞好了简易版贪吃蛇小游戏&#xff08;C语言版&#xff09;&#xff0c;邀请你来玩一下~ 目录 Snake.h Snake.c test.c Snake.h #include<stdio.h> #include<windows.h> #include<stdbool.h> #include<stdlib.h> #inclu…

某国有资本运营中心人才选拔项目纪实

某国有资本运营中心人才选拔项目纪实 【客户行业】 政府与事业单位 【问题类型】 人才招聘选拔 【客户背景】 在三年国企改革过程中&#xff0c;南方某省政府为响应国家政策&#xff0c;提出组建专业化国有资本投资运营公司&#xff0c;大力开展专业化资本运营&#xff0c;…

016 规格参数

文章目录 新增AttrController.javaAttrVo.javaAttrServiceImpl.javaAttrAttrgroupRelationEntity.javaAttrEntity.javaAttrGroupEntity.java 查询AttrController.javaAttrServiceImpl.javaAttrRespVo.java 修改回显AttrController.javaAttrServiceImpl.java 修改提交AttrContro…

京东云主机和云服务器有啥区别?轻量云主机就是轻量应用服务器吗?

京东云主机和云服务器有啥区别&#xff1f;轻量云主机就是轻量应用服务器吗&#xff1f;云主机就是云服务器的意思&#xff0c;是京东云给自家云服务器取的名字&#xff0c;阿里云叫云服务器ECS&#xff0c;腾讯云叫云服务器CVM&#xff0c;京东云服务器叫云主机&#xff0c;京…

C++ osgEarth 多窗口 同步绘制geometry

开发环境&#xff1a; win10 64bit、Qt5.15.2、C 、MSVC2019 、osg3.5.6、 osgEarth3.1 接触osgEarth不久&#xff0c;贴出来&#xff0c;希望大家指正。 注意osgEarth版本。 采用观察者设计模式&#xff0c;设置 master 和 slave 窗口&#xff0c;通过管理类和信号槽维护窗…

_c++11

嗨喽大家好呀&#xff0c;今天阿鑫给大家带来的是c进阶——c11的内容&#xff0c;好久不见啦&#xff0c;下面让我们进入本节博客的内容吧&#xff01; _c11 统一的列表初始化右值引用可变模板参数(了解&#xff0c;不常接触)lambda表达式function和bind包装器 1. 统一的列表…

JavaWeb 15.详解Servlet及其源码

所有受过的委屈&#xff0c;都在提醒你 要好好争气。 —— 24.10.7 一、Servlet简介 1.动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源&#xff0c;在程序运行之前就写好的资源&#xff0c;例如&#xff1a;html、css、js、img、音频文件和视频文件 …

职场秘籍:面试加薪,竟然拥有不同的技巧!

假如你是一位测试主管&#xff0c;去评价一名测试工程师是否优秀&#xff0c;那么你将如何去判断呢&#xff1f;你最看重的是哪方面的能力呢&#xff1f; 对于这个问题&#xff0c;是不能一概而论的&#xff0c;要分为两种情况&#xff0c;情况不同&#xff0c;答案一定是不同…

高校新生报道管理系统使用SpringBootSSM框架开发

&#xff01;&#xff01;&#xff01;页面底部,文章结尾,加我好友,获取计算机毕设开发资料 目录 一、引言 二、相关技术介绍 三、系统需求分析 四、系统设计 五、关键技术实现 六、测试与优化 七、总结与展望 一、引言 当前高校新生报到过程中存在许多问题&#xff0c;…

从0到1:用Python构建你人生中的第一个人工智能AI模型

文章目录 摘要引言数据预处理&#xff1a;为模型打下坚实基础数据预处理的步骤Python示例代码说明&#xff1a;注意事项&#xff1a; 模型建立&#xff1a;选择合适的模型神经网络示例代码说明&#xff1a; 模型训练与测试训练示例代码说明&#xff1a; 解读模型结果性能指标 深…

原生小程序开发|小程序卡片(Widget) 开发指南

开发 Widget 代表应用的一个小程序卡片&#xff0c;负责小程序卡片的展示和交互。 小程序卡片(Widget) 的开发在智能小程序的基础上增加一个目录即可&#xff0c;用于存放小程序卡片(Widget)的代码。并在 project.tuya.json 中增加一个声明。 创建小程序卡片(Widget)项目 在 …

九、Drf序列化器

九、序列化器 9.1序列化 从数据库取QuerySet或数据对象转换成JSON 9.1.1序列化器的简易使用 #新建一张部门表 class Depart(models.Model):title=models.CharField(verbose_name=部门,max_length=32)order=models.IntegerField(verbose_name=顺序)count=models.IntegerFiel…

vscode中安装python的包

首先需要调出命令行。然后运行代码&#xff0c;找到你所需要的环境。 PS C:\Users\Administrator\AppData\Local\ESRI\conda\envs\arcgispro-env> conda env list # conda environments: #C:\ProgramData\Anaconda3 base * C:\Users\Administrator\.con…

【无人机设计与控制】无人机三维路径规划,对比蚁群算法,ACO_Astar_RRT算法

摘要 本文探讨了三种不同的无人机三维路径规划算法&#xff0c;即蚁群算法&#xff08;ACO&#xff09;、A算法&#xff08;Astar&#xff09;以及快速随机树算法&#xff08;RRT&#xff09;。通过仿真实验对比了各算法在不同环境下的性能&#xff0c;包括路径长度、计算效率…

软考越来越难了,2024年软考究竟还值不值得考?

最近不少同学沟通&#xff0c;聊到软考现在越来越难了&#xff0c;考了两三次都没过&#xff0c;也有不少新同学咨询软考考试的一些福利政策&#xff0c;投入大量的物力&#xff0c;财力&#xff0c;精力&#xff0c;那么到底软考值不值得考呢&#xff1f; 01 / 关于软考 软考…

【FlagScale】异构算力混合训练方案

背景以及必要性 算力需求的高峰&#xff1a;随着人工智能&#xff08;AI&#xff09;和生成内容&#xff08;AIGC&#xff09;的发展&#xff0c;对计算资源的需求急剧增加。尤其是参数规模达到数百亿的大模型训练&#xff0c;需要大量的计算资源。 算力市场供应紧张&#xff…

一键拯救废片!3个在线教程,实现光线重塑、表情迁移、模糊图像修复

每逢国庆「黄金周」&#xff0c;都是旅游业的高光时刻。根据研判&#xff0c;今年国庆假期全社会跨区域人员流动量将达到 19.4 亿人次&#xff0c;平均每天 2.77 亿人次。 与旅游业同步增长的还有摄影行业&#xff0c;旅拍带动的妆造、服饰租赁等相关环节发展火热&#xff0c;…