为什么java虚拟机可以运行在各种操作系统上面?而其他软件不可以?

如题所述

Java虚拟机是为每个平台都提供的。
也就是说。每一个平台都会编写一个特定的Java虚拟机。

至于为什么其他软件不能运行在其他操作系统上。
这个取决于底层的体系结构和接口

Linux和Windows的文件结构都不一样,而且操作系统的架构相差特别多。
而且底层的接口也是相差巨大。特别是在库文件方面。追问

那这样看来,给C++程序 弄个C++虚拟机,也可以一次编译到处执行啊~
反正程序最终都是翻译成二进制,普通软件不能跨平台,是不是因为 相同的指令二进制串在不同的操作系统中代表不同的动作? 而(某个平台的)java虚拟机只是将这个二进制串再转换一遍~
比如:编写了一个输出“hello world”的java程序,编译程序,首先生成的一个二进制序列0011.
然后执行:
如果是Windows平台,javaVM将其转换成00110;

追答

当然可以。不过C++没有用虚拟机。使用虚拟机需要一个中介。效率低。现在Java被质疑最多的就是效率。C++编译之后,是直接可以执行的二进制代码。

而Java编译之后是中间文件,是不可以执行的文件。由Java虚拟机在翻译成每个平台的二进制。
所以同样的中间文件,可以再不同的虚拟机上,被翻译成不同的二进制代码。
于是Java就是一次编译,处处执行。

C++现在多平台同样可以执行,只不过是更换编译器。Java是更换JVM。
C++更换编译器之后,同样的代码可能因为不同编译器的语法不同而无法执行。所以C++换平台需要有一个移植的过程。

Java也就省这个事

现在Java比较流行的原因,主要是java开源免费。至于JVM的优势,已经不是很重要了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-01
java虚拟机在不同的系统上有不同的版本,针对这个系统进行开发的,而其他大部分软件没有,一般只针对一个系统开发,所以就不能在各种操作系统上运行了。
第2个回答  2012-10-01
JAVA作为一个广泛的应用,非智能机,智能机都可以玩,安卓可以,塞班可以,苹果也可以。正是因为JAVA的通用性和兼容性,许多智能机都有JAVA模拟器,不涉及侵犯系统版权问题。追问

接 @梦幻.人生 上面(推荐答案),我还没问完,字数写不下,就继续写这里了

如果是Unix平台,javaVM可能将其转换成00111。
(假如windows下 指令序列00110是输出 hello world,当然只是假如,但能说明问题。 )
如果这样的话,java的一次编译到处执行不过就是因为这个“很多版本”的javaVM吗?也没什么值得骄傲的。。。。菜鸟愚见。。

java与其他编程语言的区别在什么地方?
1. 跨平台性:Java是一种跨平台的编程语言,可以在不同的操作系统上运行。这是因为Java代码是先编译成字节码,然后在Java虚拟机上运行,而不是直接编译成机器码。2. 内存管理:Java具有自动内存管理机制,即垃圾回收机制。程序员不需要手动管理内存,而是由Java虚拟机自动回收不再使用的内存。3. 面向对...

java跨平台原理,其他语言为什么不可以
字节码文件不面向任何具体平台,只面向虚拟机。Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的Java虚拟机。但是性能比C\/C++要低。

java的跨平台工作原理
首先我们要理解什么是跨平台,所谓的跨平台就是JAVA写的一份代码可以在任意的操作系统平台上运行。为什么跨平台会成为一个问题呢?因为每一个操作系统平台支持不同的指令集我们所写的代码经过编译之后只能适用于一个平台,换一个平台就不支持了。而JAVA完美的解决了这个问题。Java的一大特色就是“write on...

需要了解linux环境下开发Java吗?
Java跨平台是因为Java的运行是在Java虚拟机上,而Java虚拟机可以运行在各种操作系统上,所以Java程序也就能运行在不同的操作系统环境下。至于在Linux下开发Java,就关系到你用Java做什么项目了,Java的swing技术 也就是图形界面编程基本已经被微软的.NET所取代。所以现在Java存在的价值主要是Java对于Oracle数...

java为什么可以部署到不同的服务器上正常运行?
楼主要搞清楚一些概念:1. Java的跨平台是指java应用程序可以运行在windows、linux等操作系统上,而这种跨平台性是通过JVM(java虚拟机)来实现的。2. 而Java EE应用可以部署到tomcat,Weblogic等Web服务器上运行是因为那些Web服务器实现了Java EE规范(servlet、jsp规范等)。

安卓为什么要用虚拟机,而不直接在Linux系统上运行程序?
1.因为本来Java在不同架构的CPU、不同操作系统上的开发就具有统一的优势。2.Java是语言,Linux是平台,语言一定要依靠于某个平台来工作。3.兼容性就是安装了JVM的机器都可以跑Java程序。4.Java虚拟机是为每个平台都提供的。也就是说,每一个平台都会编写一个特定的Java虚拟机。5.至于为什么其他软件...

为什么Java虚拟机就没有兼容问题
有,所以java虚拟机就有多种版本,有window版的jdk安装, linux版的, mac版的,都有。你用什么类型的操作系统,就安装什么类型的java虚拟机(jdk\/jre)之所以有这么多版本就是因为各种操作系统的兼容问题。 你在编程序的时候,java己经帮你做好判断了。就不需要你再判断了。补充你的补充:是的,每...

Java 程序为何要运行在 jvm 虚拟机上?
Java程序需要运行在JVM(Java虚拟机)上,主要有以下几个原因:1. 平台无关性:Java程序编写的代码是平台无关的,这意味着只要源代码相同,就可以在不同的平台上运行。这是通过将Java源代码编译成字节码文件(.class文件),然后JVM解释执行这些字节码来实现的。这样,只要在不同的平台上安装有相同版本...

为什么Java平台对程序运行有影响?
Java平台对程序运行有影响,主要是因为Java虚拟机(JVM)的存在。Java程序在编译后并不是直接转化为机器码,而是转化为一种称为字节码的中间代码,这样的好处是可以在不同的平台上运行,而不需要重新编写代码。但是,这些字节码需要在Java虚拟机上运行才能执行,而JVM的效率和性能的高低直接影响到程序的...

什么是Java虚拟机?
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 这种解释...

相似回答