Java一次编译,到处运行是如何实现的

转自:https://cloud.tencent.com/developer/article/1415194 (排版微调)

JAVA编译运行总览

Java是一种高级语言,要让计算机执行你撰写的Java程序,也得通过编译程序的编译。但是Java编译程序并不直接将Java源代码编译为相依于计算机平台的0、1序列,而是将其编译为字节码。

Java源代码的扩展名为.java,经过编译程序编译之后生成扩展名为.class的字节码。如果想要执行字节码文件,目标平台必须要安装JVM(java虚拟机),JVM会将字节码翻译为相依与平台的计算机指令,即:0、1序列。但是一定要记着:不同平台要安装专属该平台的JVM。这就好比你讲中文(.java),Java编译程序帮你翻译为英文(.class),这份英文文件到各个国家之后,再由当地看得懂英文的人(JVM)翻译为当地语言(机器指令)。

所以JVM担任的职责之一就是当地翻译员,将字节码文件翻译为当时平台看得懂的0、1序列,有了JVM,你的Java程序就达到了“编译一次到处运行”的跨平台目的。所以到这里。我们就知道了java程序跨平台性好的根本原因就是java虚拟机JVM存在的原因。

JAVA编译运行分解过程

第一步:Java源代码——.CLASS文件字节码,是java的第一次编译。生成的这个.class文件就是可以到处运行的文件。

第二步:Java字节码——到目标机器代码;执行是由JVM执行引擎来完成,JAVA的第二次编译。

JVM

到处运行的隐含条件——这里的“到处”的前提是“装有JVM”。

看完编译过程在这里说“到处运行”就毫不费力了。因为第二次编译就是在JVM中执行的,也就是在任何一个装有“JVM”的操作系统中完成的。JAVA提供了各种不同平台上的虚拟机制,所以可以实现“到处”。

对JVM的重要认知就是:

对Java程序而言,只认识一种操作系统,这个系统就是JVM,字节码文件(扩展名为.class的文档)就是JVM的可执行文件。

Java程序理想上,并不理会真正执行哪个平台,只要知道如何执行于JVM就可以了,至于JVM实际上如何与底层平台沟通,那是JVM自己的事。由于JVM实际上相当于Java程序的操作系统,JVM就负责了Java程序的各种资源管理。

JVM就是Java程序的操作系统,JVM的可执行文件就是.class文件。

Java虚拟机屏蔽了操作系统之间的差异,但是不同的系统使用的虚拟机不同。

Java一次编译,到处运行是如何实现的相关推荐

  1. 在vscode里java插件无法编译和运行java源代码,提示找不到符号踩坑记录

    如果不配置source path 会导致vscode的java插件无法编译和运行java源代码,提示找不到符号. 接下来配置source path 点击这里选择源码最外面的src目录,这样我们的pac ...

  2. java 保存后中文乱码_sublime编写java程序保存编译,运行之后中文显示乱码

    sublime是常见的java编辑工具之一,在初学者使用时可以更好的熟悉每条命令,以及逻辑关系.但在编写的java程序里包含中文字符的时候,在通过cmd命令提示符编译并运行之后会出现乱码,如下图: 很 ...

  3. JAVA命令行编译及运行

    第一部分:单文件 一.背景 目标文件HelloWorld.java package ccdate;public class HelloWorld {public static void main(St ...

  4. java只能在运行和编译吗_如何在另一个Java程序中编译和运行Java程序?

    斯蒂芬大帝 我修改了代码以包括一些检查:public class Laj {  private static void printLines(String name, InputStream ins) ...

  5. Linux下新建java程序,编译,运行(以Ubuntu为例)

    1.下载vim 命令行下输入以下命令:(笔者用的是ubuntu) sudo apt-get install vim-gtk 问是否继续的时候,输入"y"继续,等待直到完成. 至此完 ...

  6. Java——编辑、编译和运行

    1.编辑Java源程序 首先,我们使用Eclipse集成开发环境来编辑符合某个版本语言规范的Java源程序. ①一个Java源文件中不能多于一个publiic类,但是可以没有. ②Java源程序的文件 ...

  7. Java 源程序与编译型运行区别

  8. Java 编译,运行错误之 java.lang.UnsupportedClassVersionError: Bad version n umber in .class file

    这里使用的是 http://blog.csdn.net/oscar999/article/details/7305489 中的JDBCTest.java源文件 1. 在JDK1.6 中使用编译命令编译 ...

  9. java命令行编译命令_Java使用命令行编译运行程序

    一.摘要 使用javac命令来编译java文件生成.class文件 使用java命令+类名来运行编译好的class文件 二.编译不含包名的程序 假设HelloJava.java代码文件如下 Java ...

  10. ultraedit运行java_如何在UltraEdit中编译和运行Java程序

    如何在UltraEdit中编译和运行Java程序 (2011-07-28 12:33:52) 标签: it 问题提出: 可以毫不夸张地说,JDK+UltraEdit是面向Java初学者的开发工具的绝配 ...

最新文章

  1. Zuul spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL解决方案
  2. python中tolist_高效的张量操作 Pytorch中就占5种
  3. 解决Weblogic 本机可以访问控制台,网络IP访问不了
  4. 分享10个Android游戏源码,要的赶紧来哈
  5. 【渝粤题库】国家开放大学2021春2094法理学题目
  6. zookeeper单节点部署
  7. mysql查询序号低于10前面补个0_mysql 前缀 + 编号 补0
  8. html5 摄像头 直播,详解HTML5 使用video标签实现选择摄像头功能
  9. SpringBoot 整合Shiro 一指禅
  10. STM32系列芯片名称定义
  11. opencv判断两个是否相等_openCV学习pointPolygonTest()
  12. Elasticsearch6.3.0安装IK分词插件
  13. API 网关的创建与管理:待续
  14. 2022-2028年中国林业碳汇行业市场发展规模及投资机会分析报告
  15. 11尺寸长宽 iphone_2019新发布iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max尺寸规格对比
  16. 协同办公风口来袭,在线文档顺势崛起!
  17. 计算机网络量化噪音是怎么消除的,数字图像噪声消除算法研究(可编辑).doc
  18. 提高微信公众号推文阅读数小妙招
  19. Android多语言翻译国际化语言代码与中文对照整理
  20. 微软允许永久在家办公后,发现微软像极了“微商”!

热门文章

  1. layui 表单动态添加、删除input框
  2. 解决linux下创建用户时出现Creating mailbox file: File exists
  3. 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test
  4. 企业实战02:Oracle数据库的安装和卸载
  5. Python 线程事件 Event - Python零基础入门教程
  6. java155apk_【原创】浅谈 Android APK定点爆破
  7. linux操作系统字段含义,Linux系统 /etc/fstab各个字段含义解释
  8. php怎么设置网站的字符编码,php如何设置字符编码
  9. 云存储技术-Zookeeper集群的安装
  10. mysql 5.7 数据库备份_MySQL5.7.20数据库备份与恢复