Javase | Java虚拟机(JVM) / Java的 “可移植性、跨平台性” / 二进制、二进制数、二进制编码、字节码、中间码、字节码文件、机器码、机器指令 …..

二进制

  • 二进制 是计算技术中广泛采用的一种 数制,是以2为基数代表系统的二进位制,二进制由0或1来表示。
  • 二进制是由1和0两个数字组成的,它可以表示两种状态,即(通电) 和 (断电) 。
    它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制在计算机科学中特别重要,因为计算机内部的信息都是由二进制表示的。

二进制数

  • 二进制数 是计算机内部信息处理基本单位, 二进制数就是一串由0和1组成的数值,计算机的底层零件用通电来表示1,断电表示0,这样便于存储和处理数据 。
  • 二进制数也是计算机中所有数据基础,包括数字、字符、图像等。
  • 二进制数是由数字0和1组成的数值,它们的每一位都代表着2的幂次方。
    例如,二进制数1011表示为:
    1×23+0×22+1×21+1×20 = 11。

二进制编码

二进制编码是一种数字系统,二进制编码中每个数字用01表示,每一个01代表一 (bit)。

字节码

  • 字节码(Byte-code)是一种包含执行程序由一序列 op (操作码) 代码 / 数据对组成的二进制文件,是一种中间码字节是电脑里的数据量单位,1字节(B)= 8(b)。

  • Java编译器不同操作系统编译Java源代码,生成的字节码文件相同的,因为Java编译器与操作系统无关,是面向JVM进行编译的。Java语言是一次编译,处处运行

  • 上面划线句子解答:
    ①因为Java编译器JVM都是为了实现跨平台性 / 一次编写,处处运行 的特性而设计,源代码是面向JVM 编译的 (编译成字节码文件),它是被要求符合JVM语法的,而不是面向操作系统进行编译,正是因此才能通过字节码文件 + JVM实现跨平台性

    ②同时字节码文件是与操作系统无关的中间代码,它不用看自身是否符合操作系统的要求,只要符合JVM语法要求就好啦,那为什么不让它相同呢,相同还更省时省力,效率更高呢! 相同了我就能通过移植字节码文件 + 系统装的 JVM来一样的运行,多方便、多跨平台!

  • 注意 :
    字节码本地机器码都是==二进制==的,但是字节码不能直接在操作系统上运行,本地机器码则可在对应的操作系统运行。 可通过 JVM 来将字节码解释转换成具体操作系统本地机器码,这也体现了java的一个特性:
    跨平台性 / 一次编写,到处运行。 (字节码文件属于二进制文件,但是不能被操作系统直接识别和执行二进制文件)

  • 拓展 :
    字节码中,"op"是指操作码 (Operation Code),操作码是一种指示计算机执行特定操作指令,例如加法减法乘法除法跳转等。在字节码中,操作码用于指示字节码指令序列中的每个指令应该执行什么操作

字节码文件

  • 字节码文件二进制文件二进制文件不限于1010的形式,还有其他形式的二进制文件字节码文件是不能被计算机识别执行的。可通过 Java解释器来解释成具体操作系统的本地机器码,最后被操作系统执行产生效果

  • 不同操作系统下编译相同的源码得到的字节码 (文件)相同的 。

  • 为什么 不同操作系统下编译相同的源码得到的字节码 (文件)是相同的呢 ?

答: ①因为Java编译器JVM都是为了实现跨平台性 / 一次编写,处处运行 的特性而设计,源代码是面向JVM 编译的 (编译成字节码文件),它是被要求符合JVM语法的,而不是面向操作系统进行编译,正是因此才能通过字节码文件 + JVM实现跨平台性

②同时字节码文件是与操作系统无关的中间代码,它不用看自身是否符合操作系统的要求,只要符合JVM语法要求就好啦,那为什么不让它相同呢,相同还更省时省力,效率更高呢! 相同了我就能通过移植字节码文件 + 系统装的 JVM来一样的运行,多方便、多跨平台!

可移植性 / 跨平台性

  • 可移植性也被叫做跨平台性Java程序可以在任何操作系统 (例如Windows、Linux、macOS等)
    硬件平台上运行,而不需要重新编译。这是通过JVMJava字节码转换成不同操作系统本地机器码来实现的。
    大功臣是:Java字节码 + JVM字节码能被 JVM解释成本地机器码本地机器码操作系统识别且执行,最后运行,实现了一次编写,处处运行

  • 不同的操作系统装不同的JVM,在一个操作系统上编译而来的字节码文件 ( .class),可放在其他操作系统上被识别且执行

  • 例子如
    windows操作系统上编译得到的 Student.class ( 字节码文件),可以直接放在linux操作系统上运行,linux上的Java解释器 ( java.exe )会将字节码文件----解释成本地机器码------运行。从而达到一次编写,处处运行
    当然也可以通过移植 java源码 ( .java) +JVM的方式来达到一次编写,处处运行,但这是效率不高的表现,当代码过多时,编译的时间成本太高,且原理还是 字节码 + JVM来实现跨平台性

  • 注意 :
    不同的操作系统,装的JVM不一样的。同一份Java源码 (.java)在不同的操作系统编译而成的字节码 ( .class)是 一样 的,不同操作系统解释各自的本地机器码是不一样的。

Java虚拟机

  • Java虚拟机 (JVM) 是进行Java程序执行唯一通道,现在的Java程序本质上属于虚拟机语言所有的语法都按照虚拟机的标准进行编写,在执行的时候由虚拟机(JVM)负责与操作系统进行交互,这是不同的操作系统下编译的字节码文件是一样的原因之一。

  • 字节码文件 + Java虚拟机Java语言拥有了 “跨平台性” ,从而实现一次编写,多处运行

  • 注意点:

    • 同一份 Java源代码 在不同的 操作系统 下,编译出来的的 Java字节码文件一样 的。

      原因:①因为Java编译器JVM都是为了实现跨平台性 / 一次编写,处处运行 的特性而设计,源代码是面向JVM 编译的 (编译成字节码文件),它是被要求符合JVM语法的,而不是面向操作系统进行编译,正是因此才能通过字节码文件 + JVM实现跨平台性

      ②同时字节码文件是与操作系统无关的中间代码,它不用看自身是否符合操作系统的要求,只要符合JVM语法要求就好啦,那为什么不让它相同呢,相同还更省时省力,效率更高呢! 相同了我就能通过移植字节码文件 + 系统装的 JVM来一样的运行,多方便、多跨平台!

    • 不同的操作系统装的 JVM不一样 的, 因为不同操作系统内核硬件架构不同,需要不同的 JVM来适配和优化 。

    • 不同的操作系统下,由字节码解释成的本地机器码不一样 的。

  • ps: 不同的操作系统,Java源码一样,Java字节码一样,JVM不一样,生成的本地机器码将Java字节码转换为本地机器码,以便在特定的硬件平台上运行 。

  • Java程序可以在任何操作系统和硬件平台上运行,而不需要重新编译。这是通过JVM将Java字节码转换成本地机器码来实现的。(大功臣是:字节码文件 + JVM,不同的本地有不同的JVM,都用同一份Java源代码,源代码被编译成字节码----解释成具体的本地机器码,运行且达到达到同样的效果,从而实现一次编写,到处运行)。

中间码

  • 中间码是Java虚拟机(JVM)的一种特性,是一种字节码
    Java中的中间码通常与JVM有关,Java的中间码通常是指在JVM中运行的字节码。这种字节码是Java程序在运行时使用的特殊编码方式。
  • Java编译器( javac.exe )将Java 源代码 编译成JVM识别的Java 字节码
  • Java解释器( java.exe )将Java字节码 解释转换成 本地机器码
    (体现了Java的 “一次编写,多处运行”,Java字节码 + JVM实现跨平台性)

Java中的中间码包括但不限于以下几种:

1.字节码(Byte Code):
Java的字节码是一种平台无关的中间码,可以在任何支持Java虚拟机(JVM)的平台上运行。Java编译器将Java源代码编译成字节码,以便在JVM上执行。

2.本地机器码(Native Machine Code):
本地机器码是JVM将中间码编译成本地机器码的结果,这种代码可以直接在计算机硬件上运行,效率更高,但需要特定的编译器。

3.常量池(Constant Pool):
常量池是Java虚拟机中的一种数据结构,用于存储Java程序中的常量,包括类、方法、字段等的信息。

4.堆栈帧(Stack Frame):
堆栈帧是JVM中的一个内存区域,用于存储方法调用的参数、局部变量和返回地址等信息。

5.操作数栈(Operand Stack):
操作数栈也是JVM中的一个内存区域,用于存储中间计算结果和临时变量等信息。

总而言之,Java中的中间码是Java程序在运行时使用的特殊编码方式,它可以在不同的平台上运行,并且可以提高Java程序的安全性和可移植性。

机器指令

  • 机器指令是指计算机硬件能够识别和执行指令,它们是由0和1组成的二进制序列。机器指令通常由操作码操作数两部分组成,
  • 操作码 指出该指令所要完成的操作,即指令的功能。
  • 操作数 指出参与运算的对象,以及运算结果所存放的位置等。

机器码

  • 机器码指的是将指令以二进制形式表示,可被计算机直接识别和执行代码。机器码是特定的硬件平台所对应的指令集的二进制表示,可以简单地理解为机器语言。不同的硬件平台所对应的机器码可能不同,因此在实际使用中需要考虑到不同的硬件平台所对应的机器码。

    注意点:

    机器指令机器码都能直接被计算机识别和执行

Java编译器

Java编译器Javac.exe),Java开发工具,将Java源代码文件编译成字节码文件

Java解释器

Java 解释器 ( Java.exe ),Java开发工具,启动虚拟机,执行字节码文件,翻译字节码文件,翻译成系统能直接识别和执行的本地机器码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值