究竟什么是Java虚拟机(JVM)?

究竟什么是Java虚拟机(JVM)?我们都知道,在Windows上,软件包后缀有exe,而苹果的MacOSX系统上没有安装exe。类似地,MacOSX系统上的软件安装包是dmg后缀,不能安装在Windows系统上。为什么不能安装不同系统上的软件,因为操作系统的底层实现是不同的。对于Windows系统,exe后缀的软件代码被编译成能被Windows系统识别的机器代码。对于MacOSX系统,最后将DMG后缀的软件代码编译为M…

大家好,又见面了,我是你们的朋友全栈君。

我们都知道,在Windows上,软件包后缀有exe,而苹果的Mac OS X系统上没有安装exe。类似地,Mac OSX系统上的软件安装包是dmg后缀,不能安装在Windows系统上。

为什么不能安装不同系统上的软件,因为操作系统的底层实现是不同的。对于Windows系统,exe后缀的软件代码被编译成能被Windows系统识别的机器代码。对于Mac OSX系统,最后将DMG后缀的软件代码编译为Mac OSX系统识别的代码。

究竟什么是Java虚拟机(JVM)?

系统软件不能通用是一个普遍的问题。但是所有使用Java的学生都知道Java代码可以在服务器端(Linux系统)或Windows系统上运行,但是我们还没有生成许多不同的代码。那么Java语言是如何做到这一点的呢?

与其他语言不同,Java语言不直接编译代码到系统相关的机器代码,而是将其编译成特定的语言规范,我们称之为字节码。无论在Windows、Mac OSX还是Linux系统中,Java程序都要编译成字节码文件,它们只能在那之后运行。

但是,即使编译成字节码文件,系统仍然不能理解字节码文件的内容,然后需要Java虚拟机的帮助。Java虚拟机会解析字节码文件的内容,并将它们转换成操作系统能够理解的机器代码。

究竟什么是Java虚拟机(JVM)?

简单地说,对于同一个Java源文件,我们把它编译成字节码,它既没有Linux也没有Windows系统知道。在这一点上,Java虚拟机是一个翻译器。它被转换为Linux系统上的Linux机器代码来监视Linux系统,而转换为Windows系统上的Windows机器代码来监视Windows系统。这样,Java就实现了“一次写,到处跑”的伟大愿景。

在Java虚拟机诞生之前,为了支持在不同系统上运行的软件,我们必须在多个平台上编写对应于特定系统的多个代码。但是Java虚拟机出现后,只需要根据具体的规范进行编译和编写。编译器编译字节码文件之后,虚拟机会将帮助您生成相应的Windows代码和MacCode字节码。基本上,最终将生成两个机器代码,Windows Code和MacCode,但是对于开发人员来说,他们只需要编写一次代码。Java虚拟机帮助开发人员进行重复性的工作,这使得开发更加高效。

许多初学者对Java虚拟机有误解,他们会觉得Java虚拟机只能运行Java代码。但事实上,Java虚拟机运行字节码文件。换句话说,如果在PHP中编写一段代码,并使用特定的编译器生成符合字节码规范的字节码文件,Java虚拟机也可以运行。

究竟什么是Java虚拟机(JVM)?

因此,虽然Java虚拟机的名称是Java虚拟机,但是Java虚拟机与Java语言没有直接关系。它只根据Java虚拟机规范读取类文件,根据规则解析和执行字节码指令,仅此而已。

如果你足够健壮,你可以编写一个编译器,将PHP语言代码编译成符合Java虚拟机规范的字节码文件,然后Java虚拟机也可以被执行。

确切地说,Java虚拟机绑定到字节码文件(类文件)。

最后,让我们回顾一下什么是虚拟机。事实上,Java虚拟机是字节码翻译器,它将字节码文件转换成每个系统的相应机器代码,以确保字节码文件可以在每个系统中正确运行。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156872.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言学习——预处理命名「建议收藏」

    C语言学习——预处理命名「建议收藏」一、宏定义编译:对源程序进行词法、语法分析,生成代码,优化等。作用:在编译之前,对源程序中的特殊命令做一些处理,生成扩展C源程序种类:宏定义 #define文件包含 #include条件编译 #if #else #endif等格式:“#”开头占单独书写行语句尾不加分号2)C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的…

    2022年8月18日
    7
  • API 23 widget.RelativeLayout.LayoutParams——属性分析

    API 23 widget.RelativeLayout.LayoutParams——属性分析参阅:http://android.xsoftlab.net/reference/android/widget/RelativeLayout.LayoutParams.html publicstaticclassRelativeLayout.LayoutParamsextendsViewGroup.MarginLayoutParamsAddedinAPIle

    2022年7月17日
    21
  • leetcode 回文数_java 字符串转整数

    leetcode 回文数_java 字符串转整数原题链接请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。将前面步骤读入的这些数字转换为整数(即,“1

    2022年8月8日
    3
  • Centos开启6379端口

    Centos开启6379端口查看zone名称[root@vm-centos-1data]#firewall-cmd–get-active-zones#显示publicinterfaces:ens33开启6379端口[root@vm-centos-1data]#firewall-cmd–zone=public–add-port=6379/tcp–permanent#显示…

    2022年5月22日
    78
  • 词性标注

    词性标注

    2021年9月1日
    135
  • 什么是句柄

    什么是句柄一、百度百科解释:在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(filehandle),该

    2022年7月1日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号