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 个回复

正序浏览
谢谢版主大人的分享 再次加深了印象
回复 使用道具 举报
huhemingtiancai 来自手机 中级黑马 2016-4-20 01:14:12
35#
洋葱头头 发表于 2015-9-9 12:52
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何 ...

是这呀,顶
回复 使用道具 举报
都是大神啊......
回复 使用道具 举报
长知识了。。。。。
回复 使用道具 举报
总结的不错啊
回复 使用道具 举报
恩,很好,学无止境,要每天学习,不学习就是在退步。
回复 使用道具 举报
活到老,学到老 发表于 2015-11-15 16:25
真的是666,不过我还是在北京学。只要努力在哪里都能出头~~

说得好
回复 使用道具 举报
不错,这块儿还真不是太清楚呢~~
回复 使用道具 举报
感觉说实话jre就是一个程序 这个程序运行文件就是.class
回复 使用道具 举报
赞一下  说明很彻底
回复 使用道具 举报
迷茫不堪的年纪 发表于 2015-9-10 17:37
大哥您这个也太透彻了吧,  是 JRE>JDK>JVM   的节奏么? 同时还有每个系统的JVM版本不一样,需要进行相关 ...

JRE-JDK是两个不同的打包软件。跟java代码的运行原理没关系。
原始代码——编译器生成class——JVM翻译成机器码——运行。
回复 使用道具 举报
用编写软件编写的代码交给javac命令编译成class文件——cass文件通过JVM虚拟机翻译成计算机可识别的机器代码运行。
回复 使用道具 举报
赵存金 来自手机 中级黑马 2015-11-15 16:28:56
24#
不错。。。
回复 使用道具 举报

真的是666,不过我还是在北京学。只要努力在哪里都能出头~~
回复 使用道具 举报
洋葱头头 发表于 2015-10-26 11:38
JDK包含JRE啊
你下载JDK时  不是有选择系统版本的吗

是 JDK>JRE>JVM 吧?最近让一些人混洗了。
回复 使用道具 举报
哈哈,今天面试第一道就是这个
回复 使用道具 举报
迷茫不堪的年纪 发表于 2015-9-10 17:37
大哥您这个也太透彻了吧,  是 JRE>JDK>JVM   的节奏么? 同时还有每个系统的JVM版本不一样,需要进行相关 ...

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