详解 Java“一次编译,到处执行”的跨平台功能
2017-02-03 17:20
441 查看
Java的跨平台功能和它的Java虚拟机(简称 JVM)的中介作用是分不开的。所谓跨平台的“平台”指:操作系统。没错,就是我们接触的Linux和Windows等操作系统。Java跨平台,通俗的解释是:用Java编写的程序,既可以在Linux下运行,也可以在Windows下运行。
图解:
![](https://img-blog.csdn.net/20170203171855033?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvV0tYMTgzMzA2OTg1MzQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
以QQ为例,我们平时在Windows上使用的QQ不是直接使用的它的源代码,而是经过编译后的.exe文件(可执行文件),但.exe文件只能在Windows上执行,不能在Linux上执行。
Java编写的QQ,在编译时不编译成.exe而是编译为.class文件,也称为字节码文件。Java虚拟机负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一“中间层”,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
JVM是一个“桥梁”,是一个“中间件”,是实现跨平台的关键。Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。
注意:
编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如.exe),仍然需要JVM的支持。
有人问到:Java可以跨平台,那么,JVM可以跨平台吗?
的确,跨平台的是Java程序,但不是JVM。JVM是用C/C++开发的软件,是编译后的机器码,所以,不能跨平台,不同平台下仍需要安装不同版本的JVM。
图解:
以QQ为例,我们平时在Windows上使用的QQ不是直接使用的它的源代码,而是经过编译后的.exe文件(可执行文件),但.exe文件只能在Windows上执行,不能在Linux上执行。
Java编写的QQ,在编译时不编译成.exe而是编译为.class文件,也称为字节码文件。Java虚拟机负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一“中间层”,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
JVM是一个“桥梁”,是一个“中间件”,是实现跨平台的关键。Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。
注意:
编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如.exe),仍然需要JVM的支持。
有人问到:Java可以跨平台,那么,JVM可以跨平台吗?
的确,跨平台的是Java程序,但不是JVM。JVM是用C/C++开发的软件,是编译后的机器码,所以,不能跨平台,不同平台下仍需要安装不同版本的JVM。
相关文章推荐
- java为什么可以实现跨平台(即实现一次编译,到处执行,此处的平台主要指不同的操作系统),而C/C++却不行?
- java-一次编译到处执行
- 关于JAVA,特点,历史,编译式的语言&解释式的语言,什么是java?JDK?DOS?一次编译到处运行原理。
- JAVA的一次编译,到处运行,你知道多少?
- JAVA的一次编译,到处运行,你知道多少?
- 张孝祥系列课程1:Java程序的“一次编译,到处运行”原理
- 第一个java程序的编译和运行(linux下安装JDK)------一次编译,到处运行
- JAVA的一次编译,到处运行,你知道多少?
- java的所谓一次编译,到处运行
- JAVA的一次编译,到处运行,你知道多少?
- Java程序为何“编译一次,到处运行”?
- 为什么说java是“一次编译到处运行?”
- Java 代码编译和执行的整个过程详解
- Java程序为何“编译一次,到处运行”
- java的一次编译多次执行机制
- java的一次编译到处运行
- JAVA的一次编译,到处运行,你知道多少?
- JAVA实现定时器功能详解
- 运用ANT地SQL Task来完成自己地Java执行SQL脚本文件地功能
- JAVA文件编译执行与虚拟机(JVM)介绍(转)