【JVM篇】Java是如何实现平台无关的?

news2024/11/27 21:05:30

在这里插入图片描述

Java是如何实现平台无关的?

  • ✔️什么是平台无关性
  • ✔️平台无关性的实现
    • ✔️Java虚拟机
    • ✔️字节码
    • ✔️Java语言规范
  • ✔️扩展知识仓
    • ✔️平台无关性的好处
    • ✔️ 有哪些语言实现了平台无关?
    • ✔️Java中基本数据类型的大小都是确定的吗?


✔️什么是平台无关性


平台无关性就是一种语言在计算机上的运行不受平台的约束,,一次编译,到处执行 (Write Once ,RunAnywhere)。


也就是说,用Java创建的可执行二进制程序,能够不加改变的运行于多个平台。


✔️平台无关性的实现


对于Java的平台无关性的支持,就像对安全性和网络移动性的支持一样,是分布在整个Java体系结构中的。其中扮演着重要的角色的有Java语言规范、Class文件、Java虚拟机 (JVM) 等。


在计算机世界中,计算机只认识0和1,所以,真正被计算机执行的其实是由0和1组成的二进制文件。


但是,我们日常开发使用的C、C++、Java、Python等都属于高级语言,而非二进制语言。所以,想要让计算机认识我们写出来的Java代码,那就需要把他”翻译”成由0和1组成的二进制文件。这个过程就叫做编译。负责这一过程的处理的工具叫做编译器。


在Java平台中,想要把Java文件,编译成二进制文件,需要经过两步编译,前端编译和后端编译:


在这里插入图片描述

前端编译主要指与源语言有关但与目标机无关的部分。Java中,我们所熟知的javac的编译就是前端编译。除了这种以外,我们使用的很多IDE,如eclipse,idea等,都内置了前端编译器。主要功能就是把 .java代码转换成.class代码。


这里提到的.class代码,其实就是Class文件。


后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。


所以,我们说的,Java的平台无关性实现主要作用于以上阶段。如下图所示:


在这里插入图片描述

我从后往前介绍:Java虚拟机、Class文件、Java语言规范


✔️Java虚拟机


所谓平台无关性,就是说要能够做到可以在多个平台上都能无缝对接。但是,对于不同的平台,硬件和操作系统肯定都是不一样的。


对于不同的硬件和操作系统,最主要的区别就是指令不同。比如同样执行atb,A操作系统对应的二进制指令可能是10001000,而B操作系统对应的指令可能是11101110。那么,想要做到跨平台,最重要的就是可以根据对应的硬件和操作系统生成对应的二进制指令。


而这一工作,主要由我们的Java虚拟机完成。虽然Java语言是平台无关的,但是JVM却是平台有关的,不同的操作系统上面要安装对应的JVM。


在这里插入图片描述

上图是Oracle官网下载JDK的指引,不同的操作系统需要下载对应的Java虚拟机。


有了Java虚拟机,想要执行a+b操作,A操作系统上面的虚拟机就会把指令翻译成10001000,B操作系统上面的虚拟机就会把指今翻译成11101110。


在这里插入图片描述

PS : 图中的Class文件中内容为mock内容


✔️字节码


各种不同的平台的虚拟机都使用统一的程序存储格式———字节码(ByteCode) 是构成平台无关性的另一个基石。


Java虚拟机只与由字节码组成的Class文件进行交互。


我们说Java语言可以Write Once,Run Anywhere。这里的Write其实指的就是生成Class文件的过程。


因为Java Class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载并执行,所以才有了Java的平台无关性。


✔️Java语言规范


已经有了统一的Class文件,以及可以在不同平台上将Class文件翻译成对应的二进制文件的Java虚拟机,Java就可以彻底实现跨平合了吗?


其实并不是的,Java语言在跨平台方面也是做了一些努力的,这些努力被定义在Java语言规范中。


比如,Java中基本数据类型的值域和行为都是由其自己定义的。而C/C++中,基本数据类型是由它的占位宽度决定的,占位宽度则是由所在平台决定的。所以,在不同的平台中,对于同一个C++程序的编译结果会出现不同的行为。


举一人简单的例子,对于int类型,在Java中,int占4个字节,这是固定的但是在C++中却不是固定的了。在16位计算机上,int类型的长度可能为两字节;在32位计算机上,可能为4字节,当64位计算机流行起来后,int类型的长度可能会达到8字节。(这里说的都是可哦!)


在这里插入图片描述

通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强了强有力的支持。


✔️扩展知识仓


✔️平台无关性的好处


作为一门平台无关性语言,无论是在自身发展,还是对开发者的友好度上都是很突出的。


因为其平台无关性,所以ava程序可以运行在各种各样的设备上,尤其是一些嵌入式设备,如打印机、扫描仪、传真机等。随着5G时代的来临,也会有更多的终端接入网络,相信平台无关性的Java也能做出一些贡献


同时,Java通过Swing,FX,可以对客户端进行编写,开发者可以通过Java编写一次,就可以运行到IOS或者Windows,Linux等OS中,也减轻了开发者的开发负担


对于Java开发者来说,Java减少了开发和部署到多个平台的成本和时间。真正的做到一次编译,到处运行。


✔️ 有哪些语言实现了平台无关?


1 . 所有基于JVM的语言都实现了平台无关,如Groovy、Scala、Jthon等


2 . 其他的有VM的语言也同样实现了亚台无关,如C#


脚本语言: JavaScript,Python,Php


✔️Java中基本数据类型的大小都是确定的吗?


非也非也,boolean类型的大小在不同的情况下是不确定的,依据JVM规范第2版:


Although the Java virtual machine defines a boolean type, it only provides very limited support for it.


There are no Java virtual machine instructions solely dedicated to operations on boolean values.


instead, expressions in the Java programming lanquage that operate on boolean values are compiled
to use values of the Java virtual machine int data type.


The Java virtual machine does directly support boolean arrays. lts newarrayinstruction enablescreation of boolean arrays. Arrays of type boolean are accessed and modified using the byte arrayinstructions baload and bastore.2


The Java virtual machine encodes boolean array components using 1 to represent true and 0torepresent false. Where Java programming language boolean values are mapped by compilers tovalues of Java virtual machine type int, the compilers must use the same encoding.

1 The first edition of The JavaTM Virtual Machine Specification did not consider boolean to be a Javavirtual machine type. However, boolean values do have limited support in the Java virtual machine.This second edition clarifies the issue by treating boolean as a type.


2 ln Sun’s JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in theJava programming language are encoded as Java virtual machine byte arrays, using 8 bits perboolean element.


简单看下来,如果是单个的布尔类型,长度为32bit,如果是布尔数组,则每个布尔值的长度为8bit.

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

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

相关文章

TikTok年度回顾:2023年的亮点时刻

2023年,TikTok再次成为全球关注的焦点,不仅延续了其独特的社交媒体魅力,还在创新、文化影响力等方面取得了一系列令人瞩目的亮点时刻。本文将深入探讨TikTok在2023年的重要事件、创新举措以及对社会的深远影响。 创新功能引领社交潮流 TikTok…

数据结构与算法教程,数据结构C语言版教程!(第一部分、数据结构快速入门,数据结构基础详解)三

第一部分、数据结构快速入门,数据结构基础详解 数据结构基础,主要研究数据存储的方式。 本章作为数据结构的入门课程,主要让读者明白,数据结构到底是什么,常用的数据存储结构有哪些,数据结构和算法之间到底…

【WPF.NET开发】路由事件

本文内容 先决条件什么是路由事件?路由策略为什么使用路由事件?附加并实现路由事件处理程序类处理程序WPF 中的附加事件XAML 中的限定事件名称WPF 输入事件EventSetter 和 EventTrigger Windows Presentation Foundation (WPF) 应用程序开发人员和组件…

next.js 开发网站的hello world

本文介绍建立一个简单的next.js 工程,以及简单修改。然后也简单说了2种路由方式的选择。 开始next.js工程前需要node.js , 还需要编辑器,我这里选择的是visual code。如果没有安装node.js 请参考下: visual code 下的node.js的he…

UWB高精度人员定位系统源码,全方位护航安全生产

定位管理系统使用UWB定位技术,通过在厂区安装定位基站,为人员或设备佩戴定位标签的形式,实现人员精准实时定位。可以实现人员、车辆物资实时定位、工作考勤、电子围栏、历史轨迹回放、巡检巡查、物资盘点、路径规划、三维显示等,以…

EBDP:解锁大数据的奥秘✨

大数据时代已经来临,你是否也想掌握这门“显学”?🌟 EBDP,这个让众多专业人士趋之若鹜的认证,究竟有何魅力?今天就带你一探究竟! 🌟EBDP:大数据的“敲门砖”&#x1faa…

Mini MyBatis-Plus(下)

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 最核心的内容前两篇已经…

通过学习这些技巧,让你的Python代码更加简洁和高效

文章目录 前言列表性能陷阱陷阱一陷阱二 快速合并字典通过有序字典去重最后Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全职路线 前言 今天看到一些关于容器的使用技巧&am…

隧道代理HTTP工作原理:一场奇妙的网络魔法表演

嘿,小伙伴们!今天我们要一起探索一个有趣的话题——隧道代理HTTP的工作原理。这不是普通的表演,而是一场奇妙的网络魔法表演! 首先,让我们想象一下,网络世界就像一个大舞台,而我们每个人都是这…

邮政快递查询,邮政快递单号查询,按物流更新量来筛选单号

如何快速、准确地查询多个快递单号的物流信息?如何提高工作效率,减少一个个等待的焦虑?别担心,【快递批量查询高手】为你排忧解难,不仅可以帮你省下大量的时间,还能提高工作效率,让你更好地享受…

喜讯丨智安网络实力上榜《嘶吼2023中国网络安全产业势能榜》

近日,嘶吼安全产业研究院正式发布《嘶吼2023中国网络安全产业势能榜》。智安网络凭借在网络安全行业领先的产品实力、专业的安全服务水平及多年累积的行业经验,从300余家厂商中脱颖而出,成为《中国网络安全产业势能榜》互联网行业势能厂商。 …

计算机网络复习4

网络层——点到点 文章目录 网络层——点到点功能路由算法IPV4NAT 网络地址转换子网划分与子网掩码、CIDR地址解析协议ARP:根据IP地址找到MAC地址动态主机配置协议DHCP网际控制报文协议ICMPIPV6内部网关协议(IGP)外部网关协议(EGP) 功能 异构…

【银行测试】核心系统/信贷系统+各个测试点总结(详细)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、银行核心系统和…

数据结构-八大排序详解(动图+实现详解+总结)

1 前言 本章主要讲解: 八大排序的基本知识及其实现 注:这里的八大排序指直接插入,希尔,选择,堆排,冒泡,快排,归并,基数 八大排序汇总图: 2 排序概念及应用 …

MindOpt 云上建模求解平台:多求解器协同优化

前言 数学规划是一种数学优化方法,主要是寻找变量的取值在特定的约束情况下,使我们的决策目标得到一个最大或者最小值的决策。 使用数学规划的方法我们需要确定问题的目标、约束、变量的取值范围,然后进行数学建模,将数学公式转化…

前端使用高德api的AMap.Autocomplete无效,使用AMap.Autocomplete报错

今天需要一个坐标拾取器,需要一个输入框输入模糊地址能筛选的功能 查看官方文档,有一个api可以直接满足我们的需求 AMap.Autocomplete 上代码 AMapLoader.load({"key": "你的key", // 申请好的Web端开发者Key,首次调…

[AI编程]AI辅助编程助手-亚马逊AI 编程助手 Amazon CodeWhisperer

亚马逊AI 编程助手 Amazon CodeWhisperer 是一种基于人工智能技术的编程辅助工具,旨在帮助开发人员更高效地编写代码。它可以提供实时的代码建议、自动补全和错误检查,帮助优化代码质量和提高编程效率。 Amazon CodeWhisperer 使用了自然语言处理和机器…

Lunix的奇妙冒险————权限篇

文章目录 一.什么是权限二.用户权限和类别。1.用户2.角色3.更换文件角色 三.文件的类别和对应权限1.文件的类别。2.文件属性权限1.权限说明。2.默认生成文件权限来源3.更改权限 3.文件的执行与删除 四.不同用户共同在一个目录下的权限。1.普通用户家目录2.在同一目录下文件的权…

述职报告一般怎么写?

在日常生活中,我们经常需要撰写各种报告。对于报告的撰写,我们需要清晰地解释涉及的专业术语。现在,我为大家整理了一些精选的晋升述职报告范文,供大家参考和借鉴。希望这些范文能对大家有所帮助。 晋升述职报告范文精选1 一、个…

力扣题目学习笔记(OC + Swift)19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 此题目为链表题,拿出我们的杀手锏,链表解题经典三把斧: 哑巴节点栈快慢指针 关于内存问题:由于Swift及…