Java一次编译,到处运行是如何实现的
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一次编译,到处运行是如何实现的相关推荐
- 在vscode里java插件无法编译和运行java源代码,提示找不到符号踩坑记录
如果不配置source path 会导致vscode的java插件无法编译和运行java源代码,提示找不到符号. 接下来配置source path 点击这里选择源码最外面的src目录,这样我们的pac ...
- java 保存后中文乱码_sublime编写java程序保存编译,运行之后中文显示乱码
sublime是常见的java编辑工具之一,在初学者使用时可以更好的熟悉每条命令,以及逻辑关系.但在编写的java程序里包含中文字符的时候,在通过cmd命令提示符编译并运行之后会出现乱码,如下图: 很 ...
- JAVA命令行编译及运行
第一部分:单文件 一.背景 目标文件HelloWorld.java package ccdate;public class HelloWorld {public static void main(St ...
- java只能在运行和编译吗_如何在另一个Java程序中编译和运行Java程序?
斯蒂芬大帝 我修改了代码以包括一些检查:public class Laj { private static void printLines(String name, InputStream ins) ...
- Linux下新建java程序,编译,运行(以Ubuntu为例)
1.下载vim 命令行下输入以下命令:(笔者用的是ubuntu) sudo apt-get install vim-gtk 问是否继续的时候,输入"y"继续,等待直到完成. 至此完 ...
- Java——编辑、编译和运行
1.编辑Java源程序 首先,我们使用Eclipse集成开发环境来编辑符合某个版本语言规范的Java源程序. ①一个Java源文件中不能多于一个publiic类,但是可以没有. ②Java源程序的文件 ...
- Java 源程序与编译型运行区别
- Java 编译,运行错误之 java.lang.UnsupportedClassVersionError: Bad version n umber in .class file
这里使用的是 http://blog.csdn.net/oscar999/article/details/7305489 中的JDBCTest.java源文件 1. 在JDK1.6 中使用编译命令编译 ...
- java命令行编译命令_Java使用命令行编译运行程序
一.摘要 使用javac命令来编译java文件生成.class文件 使用java命令+类名来运行编译好的class文件 二.编译不含包名的程序 假设HelloJava.java代码文件如下 Java ...
- ultraedit运行java_如何在UltraEdit中编译和运行Java程序
如何在UltraEdit中编译和运行Java程序 (2011-07-28 12:33:52) 标签: it 问题提出: 可以毫不夸张地说,JDK+UltraEdit是面向Java初学者的开发工具的绝配 ...
最新文章
- Zuul spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL解决方案
- python中tolist_高效的张量操作 Pytorch中就占5种
- 解决Weblogic 本机可以访问控制台,网络IP访问不了
- 分享10个Android游戏源码,要的赶紧来哈
- 【渝粤题库】国家开放大学2021春2094法理学题目
- zookeeper单节点部署
- mysql查询序号低于10前面补个0_mysql 前缀 + 编号 补0
- html5 摄像头 直播,详解HTML5 使用video标签实现选择摄像头功能
- SpringBoot 整合Shiro 一指禅
- STM32系列芯片名称定义
- opencv判断两个是否相等_openCV学习pointPolygonTest()
- Elasticsearch6.3.0安装IK分词插件
- API 网关的创建与管理:待续
- 2022-2028年中国林业碳汇行业市场发展规模及投资机会分析报告
- 11尺寸长宽 iphone_2019新发布iPhone 11、iPhone 11 Pro、iPhone 11 Pro Max尺寸规格对比
- 协同办公风口来袭,在线文档顺势崛起!
- 计算机网络量化噪音是怎么消除的,数字图像噪声消除算法研究(可编辑).doc
- 提高微信公众号推文阅读数小妙招
- Android多语言翻译国际化语言代码与中文对照整理
- 微软允许永久在家办公后,发现微软像极了“微商”!
热门文章
- layui 表单动态添加、删除input框
- 解决linux下创建用户时出现Creating mailbox file: File exists
- 安装redis,执行make test时遇到You need tcl 8.5 or newer in order to run the Redis test
- 企业实战02:Oracle数据库的安装和卸载
- Python 线程事件 Event - Python零基础入门教程
- java155apk_【原创】浅谈 Android APK定点爆破
- linux操作系统字段含义,Linux系统 /etc/fstab各个字段含义解释
- php怎么设置网站的字符编码,php如何设置字符编码
- 云存储技术-Zookeeper集群的安装
- mysql 5.7 数据库备份_MySQL5.7.20数据库备份与恢复