前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JVM实现跨平台的关键因素:class文件和“翻译器”

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

原创
作者头像
王二蛋
发布于 2024-09-12 13:07:48
发布于 2024-09-12 13:07:48
2880
举报

前言

当你通过上文对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一个重要的知识点:类加载机制。在面试时经常会被问到相关知识,比如什么是类加载机制?有哪些类加载器?什么是双亲委派机制?感兴趣的可以移步至《Java面试中经常被问到的15道JVM面试题》,有具体的说明。

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

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

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

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

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

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

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

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

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

关键因素:“翻译器”

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

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

解释器

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

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

在这里插入图片描述
在这里插入图片描述

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

即时编译器(JIT)

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

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

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

总结

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
前端性能优化--数据指标体系
常常进行前端性能优化的小伙伴们会发现,实际开发中性能优化总是阶段性的:页面加载很慢/卡顿 -> 性能优化 -> 堆叠需求 -> 加载慢/卡顿 -> 性能优化。
被删
2024/05/15
3650
前端性能优化--数据指标体系
面试必问——前端页面性能指标基本介绍
导语 | 面试的时候问页面性能有哪些指标,却经常得到合并文件、压缩资源等优化手段的答案,是时候整体盘一下“性能指标”了。 1. 基本指标介绍 首先前端性能指标一般分为以下几种: 首屏绘制(First Paint,FP) 首屏内容绘制(First Contentful Paint,FCP) 可交互时间(Time to Interactive,TTI) 最大内容绘制(Largest Contentful Paint,LCP) 首次有效绘制(First Meaning Paint, FMP) FP 是时间线上的第
用户1097444
2022/06/29
3.6K0
面试必问——前端页面性能指标基本介绍
一个工作三年的前端是如何做性能优化的
你是怎么做性能优化的?关于这一个问题,也是我们前端开发程序员经常会讨论到的问题,接下来这篇文章将总结一下前端方面的性能优化及方式。
程序媛夏天
2024/01/18
2680
一个工作三年的前端是如何做性能优化的
性能优化到底应该怎么做
TL;DR: 当我们在做性能优化的时候,我们究竟在优化什么?做性能优化需不需要了解底层的东西?需要了解到什么程度?浏览器底层是一个什么架构?浏览器渲染的本质究竟是什么?哪些方面对用户的体验影响才是最大的?有没有业内一些通用的标准或标杆参考?都1202年了,雅虎军规还有没有用?性能分析工具都有哪些?我们从哪方面进行分析才是合适的?
010101011001
2021/05/15
2.8K0
性能优化到底应该怎么做
腾讯企鹅辅导 H5 性能极致优化
H5 项目是企鹅辅导的核心项目,已迭代四年多,包括了课程详情页/老师详情页/报名页/支付页面等页面,构建产物用于企鹅辅导 APP/H5(微信/QQ/浏览器),迭代过程中了也累积了一些性能问题导致页面加载、渲染速度变慢,为了提升用户体验,近期启动了 “H5 性能优化” 项目,针对页面加载速度,渲染速度做了专项优化,下面是对本次优化的总结,包括以下几部分内容:
winty
2021/08/24
1.3K0
腾讯企鹅辅导 H5 性能极致优化
当我们进行性能优化,我们在优化什么(LightHouse优化实操)
    好的互联网产品不仅仅在功能上要高人一筹,在性能层面也需要出类拔萃,否则金玉其外败絮其中,页面是美轮美奂了,结果首屏半天加载不出来,难免让用户乘兴而来,败兴而归。
用户9127725
2022/08/08
7510
当我们进行性能优化,我们在优化什么(LightHouse优化实操)
前端性能优化学习 02 Web 性能指标「建议收藏」
我们已经知道性能的重要性,但当我们讨论性能的时候,让一个网页变得更快,具体指哪些内容?
全栈程序员站长
2022/09/29
1.8K0
前端性能优化学习 02 Web 性能指标「建议收藏」
Chrome Dev Summit 2019,你需要知道关于前端性能的内容都在这里
11月12日,一年一度的Chrome Developer Summit举行,会议主要会聚焦于前端相关的主题,例如PWA、用户体验、性能、安全与隐私等等。在两天的时间里,Chrome的内部开发人员分享了Chrome的生态系统,工具和方法的更新,用于帮助我们构建更好,更具吸引力体验的网站。由于Google以及Chrome团队都非常重视速度,因此许多主题都是关于性能的。
桃翁
2019/12/04
7850
面试官问你前端性能优化时,他想问什么?
但在面试的时候,问这类问题时,候选人经常答得不尽人意,大部分人会把自己能想起来的优化措施,给背一遍。
虎妞先生
2023/10/16
6100
面试官问你前端性能优化时,他想问什么?
【总结】2072- 前端常见性能优化策略
采用域名分片技术,将资源放到不同的域名下。接触同一个域名最多处理6个TCP链接问题。
pingan8787
2024/06/19
1690
【总结】2072- 前端常见性能优化策略
新时代的 Google Web Vitals 性能指标
传统的性能指标如 load time[1] 或 DOMContentLoaded[2] 专注于容易衡量的技术细节,但是它们很难反应出用户所真正关心的是什么。如果你仅仅是把加载速度优化的更快,你很快就会发现网站的用户体验依然很差。一个站点的总加载时间可以很快,但如果它直到所有内容都准备好了才渲染的话,用户只能盯着空白的屏幕一段时间。如果点击了按钮但没有反应,是因为主线程被 JavaScript 任务占满而阻塞了,此时虽然页面已经“加载”,但用户依然会感到沮丧。
前端迷
2021/11/12
1.6K0
前端到底要怎么去性能优化?
页面的性能优化对于前端来说永远是离不开的课题,前端性能优化一直也不是作为一个单独的问题存在,它往往需要开发者结合计算机网络、浏览器相关技术、前端框架、构建工具以及开发者自己的代码等多层面去思考优化的方案,所以前端性能不应该是前端领域的一个孤岛⛱️,而需要作为串联起前端技术的零件🔩。
winty
2024/05/21
3100
前端到底要怎么去性能优化?
浏览器之性能指标-LCP
前几天,我们写了关于Chrome的FCP,看后台数据,反响还是不错的。那么,今天我们继续讲另外一个比较重要的性能指标LCP。
前端柒八九
2023/08/10
1.9K0
浏览器之性能指标-LCP
重学前端(五)——谈谈前端性能优化!
大家知道。我们每天都在谈前端性能优化,每天都在背前端性能优化方案,然而,我们却不知道他背后的原理以及涉及那些知识储备。所以,我问了自己一些问题,
用户7413032
2022/03/09
1.3K0
重学前端(五)——谈谈前端性能优化!
干货 | 提升50分,Trip.com 机票基于 PageSpeed 的前端性能优化实践
作者简介 Patrick,携程资深前端开发工程师,专注于前端工程化和性能优化。 前言 网站性能对于用户体验、转化率和流失率、SEO 排名等至关重要,Trip.com 主要用户来自海外,对网站访问性能有更高的要求。能够快速响应的网站通常有机会获取更多流量,并为用户带来更好的体验。 近期我们对 Trip.com 机票站点做了一版性能优化,通过对主要 landing 页面进行系统优化,将页面的 PageSpeed 评分从原本 30 左右提升到 80 分以上。 这里分享在优化过程中的一些经验,将从性能指标、性能测
携程技术
2022/03/04
7280
浏览器之性能指标_FCP
在前几天,我们写了,关于如何利用fetchpriority对页面资源进行优先级的处理。
前端柒八九
2023/08/01
1.7K0
浏览器之性能指标_FCP
秒开率破90%!交易后台渲染性能优化 | 得物技术
一直以来,体验都是得物技术部的关键词之一,对于前端开发而言,提高用户体验更是一项至关重要的工作。
得物技术
2024/04/16
2700
秒开率破90%!交易后台渲染性能优化 | 得物技术
Web性能领域常见的专业术语
编者按:本文作者Berwin,W3C性能工作组成员,360导航资深前端工程师。《深入浅出Vue.js》作者。
桃翁
2020/02/19
1.7K0
超全对照!前端监控的性能指标与数据采集
导语 | 前端监控可以让你更了解自己的网站,更早地发现和解决存在的问题,再通过优化来提升网站的性能和体验。那么,如何衡量一个网站的好坏?有什么指标?性能数据如何采集?本文围绕这些问题和你一起探讨。 一、为什么要做前端性能监控 可能你也有过这样的经历: 有用户反馈你的网站很慢,然后你立马紧张地在浏览器上打开用户反馈的网站。经过检查,可能你的网站一切正常,也可能你的网站真的很慢,甚至打不开了。 有一天老板问你:“咱们的网站性能体验怎么样?”你该如何回答?“挺好的,很快,这个月没有发生过故障....”老板再
腾讯云开发者
2021/06/02
4.2K0
Web页面全链路性能优化指南
性能优化不单指优化一个页面的打开速度,在开发环境将一个项目的启动时间缩短使开发体验更好也属于性能优化,大文件上传时为其添加分片上传、断点续传也属于性能优化。在项目开发以及用户使用的过程中,能够让任何一个链路快一点,都可以被叫做性能优化。
唐志远
2022/10/27
1.9K0
Web页面全链路性能优化指南
推荐阅读
相关推荐
前端性能优化--数据指标体系
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档