Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 便携式和独立于机器之间的区别是什么?_Java_Asp.net_.net - Fatal编程技术网

Java 便携式和独立于机器之间的区别是什么?

Java 便携式和独立于机器之间的区别是什么?,java,asp.net,.net,Java,Asp.net,.net,这可能是一个愚蠢的问题,但我混淆了便携式和机器独立性。 什么是Java,c#.net:可移植的还是独立于机器的?可移植意味着您可以在不进行任何安装的情况下运行此程序 机器独立意味着相同的代码可以在不同的操作系统上执行 这个问题也很有帮助。来自: 当移植到新平台的成本很低时,软件是可移植的 比从头开始写的成本还低。成本越低 移植软件,相对于它的实现成本来说,更多 据说是便携式的 另一方面,独立于机器的软件不需要在另一台机器上运行任何工作(例如从Windows到Mac OS)。根据这个定义,它也是高

这可能是一个愚蠢的问题,但我混淆了便携式和机器独立性。
什么是Java,c#.net:可移植的还是独立于机器的?

可移植意味着您可以在不进行任何安装的情况下运行此程序

机器独立意味着相同的代码可以在不同的操作系统上执行

这个问题也很有帮助。

来自:

当移植到新平台的成本很低时,软件是可移植的 比从头开始写的成本还低。成本越低 移植软件,相对于它的实现成本来说,更多 据说是便携式的

另一方面,独立于机器的软件不需要在另一台机器上运行任何工作(例如从Windows到Mac OS)。根据这个定义,它也是高度可移植的

便携式和独立于机器之间的区别是什么

对此没有真正的答案。这取决于您选择接受谁对“便携”和“独立于机器”的定义。(我可以选择一对我同意的定义并进行比较。但我认为这并不客观。)


什么是Java、c#.net:可移植还是独立于机器

你可以说Java和C既不是可移植的,也不是独立于机器的

  • Java或C#程序仅在具有JVM或CLR实现的平台上运行,并且具有相应标准库的“兼容”实现。因此,这些语言不是机器独立的(字面意义上)

  • 有很多Java(我相信C)程序的例子,它们在不同的Java/C实现上表现不同。有时,这是由于运行库和/或主机操作系统的差异造成的。有时这是由于程序员的无效假设造成的。但关键是Java/C软件通常需要移植工作。因此,它们是不可移植的(在字面意义上)


机器独立性

机器独立性指的是软件可以被执行,而不管它在哪台机器上执行。依赖于机器的软件可能是为使用而编写的,比如特定于特定体系结构的汇编指令。例如,如果您编写一个C++程序,它使用的是内嵌程序集,它依赖于特定的处理器指令,例如SIMD指令,那么软件的PICE是依赖于机器的,因为它具有特定的机器需求——它只能在支持特定SIMD指令集的机器上工作。 相反,C#和Java编译成字节码,由虚拟机执行,虚拟机将字节码作为本机代码直接在处理器上执行。在这种情况下,虚拟机依赖于机器,因为它将针对为其编写的特定硬件执行—例如,仅32位Intel处理器或ARM智能手机。但是,在虚拟机上运行的Java和C#应用程序是独立于机器的,因为它们不关心底层平台是什么,只要有一个虚拟机可以为它们转换为底层平台。抽象层虚拟机有助于将应用程序与底层硬件分离,这就是为什么这些应用程序可以是机器独立的

可移植性

可移植性是一个独立但相关的概念,它是一个涵盖多种可能性的广义术语。如果一个软件可以构建和执行,或者可以在多个平台上执行,那么它就是可移植的。这意味着机器独立的软件本质上是可移植的,因为它本质上是可移植的

可移植性大致有两个方面:硬件可移植性和软件可移植性。暂时忽略Mono之类的.NET实现,只关注Microsoft的.NET实现。可以公平地说,.NET是硬件可移植的,因为它可以在支持.NET运行时的任何硬件上执行,然而,由于微软的实现只在Windows和Windows派生的操作系统上可用,可以公平地说,它不是特别的软件可移植性——没有Mono,它无法在Mac OS X或Linux上执行。相比之下,Java既可以说是硬件可移植的,也可以说是软件可移植的,因为它可以在Windows、OS X、Linux等多个操作系统上运行,因此它是软件可移植的,而硬件可移植的,因为它可以在ARM、x86和x64等不同的硬件体系结构上运行

最后,还有语言可移植性的问题。许多人会争辩说,虽然为Windows编译的C++应用程序不会在Linux上本地执行,有可能编写C++代码,这样可以在Linux和Windows上编译相同的源代码集而不进行任何更改,这意味着您可以简单地通过编译它来将同一个应用程序移植到不同的操作系统。在这方面,我们可以说,虽然编译的C++应用程序不是可移植的,但是C++应用程序的源代码可以是便携式的。这适用于包括C在内的许多其他语言

免责声明


这是一个稍微简化的解释,有许多边缘案例打破了这些规则,使其成为一个如此复杂和主观的主题——例如,如果您使用Java本机接口,就有可能编写一个依赖于机器的Java应用程序。

因此,基于此定义,Java可能是机器独立的?我认为它的可移植性与否取决于它是如何分布的?我认为这并不是一个特别正确的答案。与机器独立性相比,术语可移植性与机器无关