A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的。
那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。

JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。

而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。

JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。

注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。

所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。

注意:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。

评分

参与人数 1技术分 +1 收起 理由
耀阳圣尊 + 1

查看全部评分

35 个回复

倒序浏览
理解透彻。学习了
回复 使用道具 举报
顶一下.............///
回复 使用道具 举报
温故而知新哈哈
回复 使用道具 举报
复习一下!
回复 使用道具 举报
赞一下~~~
回复 使用道具 举报
复习一下
回复 使用道具 举报
回复 使用道具 举报
学习下,
回复 使用道具 举报
额,再复习一下
回复 使用道具 举报
理解的非常透彻,长见识了
回复 使用道具 举报
Java_EE 来自手机 中级黑马 2015-9-10 14:44:46
12#
原来编译生成的字节码文件不是机器文件,不能够被直接运行。我明白了,为什么我的基础测试题做错了呀!!
回复 使用道具 举报
大哥您这个也太透彻了吧,  是 JRE>JDK>JVM   的节奏么? 同时还有每个系统的JVM版本不一样,需要进行相关下载!  大哥,我理解得对不对啊?
回复 使用道具 举报
嗯,很全面啊
回复 使用道具 举报
于是就水了一贴
回复 使用道具 举报
很详细啊,顶一下,虚拟机就是胖翻译
回复 使用道具 举报
支持支持,学习了,顶一下
回复 使用道具 举报
很好的总结!
回复 使用道具 举报
大神呀.....
回复 使用道具 举报
迷茫不堪的年纪 发表于 2015-9-10 17:37
大哥您这个也太透彻了吧,  是 JRE>JDK>JVM   的节奏么? 同时还有每个系统的JVM版本不一样,需要进行相关 ...

JDK包含JRE啊
你下载JDK时  不是有选择系统版本的吗
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马