gpt4 book ai didi

java - PORTABLE 和 Machine Independent 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 23:11:31 25 4
gpt4 key购买 nike

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




8年前关闭。




这可能是一个愚蠢的问题,但我对可移植和独立于机器感到困惑。
什么是 Java、c#.net:可移植还是独立于机器?

最佳答案

机器独立

机器独立性是指可以执行的软件的概念,而与它在其上执行的机器无关。一台机器依赖 软件可能是为了使用而编写的,比如特定于特定架构的汇编指令。例如,如果您使用依赖于特殊处理器指令(例如 SIMD 指令)的内联汇编编写 C++ 应用程序,那么该软件部分取决于机器,因为它具有特定的机器要求——它只能在支持特定所需的 SIMD 指令集。

相比之下,C# 和 Java 编译为由虚拟机执行的字节码,该虚拟机采用该字节码并将其作为 native 代码直接在处理器上执行。在这种情况下,虚拟机是机器 依赖 因为它将针对为其编写的特定硬件执行 - 例如,仅 32 位 Intel 处理器或 ARM 智能手机。然而,在虚拟机上运行的 Java 和 C# 应用程序是机器 独立 因为他们不在乎底层平台是什么,只要有虚拟机可以为他们翻译到底层平台。该抽象层,即虚拟机,有助于将应用程序与底层硬件分开,这就是为什么这些应用程序可以是机器的原因独立 .

便携

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

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

最后,还有语言可移植性的问题。许多人会争辩说,尽管为 Windows 编译的 C++ 应用程序不会在 Linux 上 native 执行,但可以编写 C++ 代码,使相同的源代码集可以在 Linux 和 Windows 上编译而无需更改——这意味着您只需按原样编译即可将相同的应用程序移植到不同的操作系统。在这方面,我们可以说,虽然编译的 C++ 应用程序不可移植,但 C++ 应用程序的源代码是可移植的。这适用于包括 C 在内的许多其他语言。

免责声明

这是一个稍微简化的解释,并且有许多边缘情况打破了这些规则,这使得它成为一个如此复杂和主观的主题 - 例如,如果您使用 Java native 接口(interface),则可以编写依赖于机器的 Java 应用程序。

关于java - PORTABLE 和 Machine Independent 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com