“架构中立”和“便携式”之间有什么区别?
我正在阅读Herbert Schildt的书“Java:The Complete Reference”,他在那里写道Java是可移植的,并且是架构中立的。 这两个概念有什么区别? 我从文中无法理解。
看看这篇关于Java的白皮书 。
基本上他们说除了在多个环境中运行之外(因为在JVM中进行解释),无论环境如何,它都运行相同。 前者是便携式的,后者是建筑中立的原因。 例如,int的大小不会因平台而异; 它是由JVM建立的。
便携式C程序:
#include #include int main(void) { printf("Hello, World!"); return (EXIT_SUCCESS); }
您可以使用该C程序并使用C编译器在任何计算机上编译它并使其工作(假设它支持printf …我猜可能没有一些东西)。
如果你在Windows上编译它并尝试在Mac上运行该二进制文件它将无法正常工作。
用Java编写的同类程序也可以在安装了Java编译器的任何机器上编译,但生成的.class文件也可以在任何带有Java VM的机器上运行。 这是建筑中立的部分。
因此,可移植是源代码的想法,而架构中立是一个可执行的想法。
环顾四周,我发现另一本书描述了两者之间的区别。
对于体系结构中立,编译器将生成体系结构中立的目标文件,这意味着在存在Java运行时的情况下,编译的Java代码(字节码)可以在许多处理器上运行。
对于便携式,它意味着规范中没有与实现相关的方面。 例如,在C ++中,int可以是16位,或32位,具体取决于谁在实现规范,而在Java中,int总是32位。
我从另一本书(Core Java 2:Fundamentals)中获取了我的信息,因此它可能与他的含义不同。 这是一个链接: Core Java 2:Fundamentals
对于体系结构中立,本书意味着字节代码独立于运行程序的底层平台。 例如,无论您的操作系统是32位还是64位,Java字节代码都完全相同。 您不必为32位或64位重新编译Java源代码。 (因此,“架构”指的是CPU架构)。
“便携式”意味着在一个操作系统上运行的程序可以在另一个操作系统上运行而无需进行任何更改。 使用Java,您甚至不必重新编译源代码; 例如,在Windows上编译的* .class文件适用于Linux,Mac OS X或任何其他可用Java虚拟机的操作系统。
请注意,您必须注意一些事情,以使您的Java代码真正可移植。 例如,如果您在Java应用程序中硬编码Windows样式的文件路径(C:\ Users \ Myself …),则它无法在其他操作系统上运行。
我怀疑他意味着代码可以在许多平台上运行而无需重新编译。 也可以编写处理底层系统的代码而无需重写或条件。
例如,可以在64位Linux系统上读取32位Windows系统中的序列化对象。
java中有3个相关的function。
- 平台无关 – >这意味着java程序可以在任何操作系统上运行而无需考虑其供应商。 它是通过使用名为“BYTE CODE”的MAGIC CODE实现的。 然后,JVM在运行时解释它或使用JIT(即时)编译将其编译为正在运行的体系结构的机器代码(例如i386)。
- 架构中立 – >这意味着java程序可以在任何处理器上运行,而不管其供应商和架构如何。 所以它避免了重建问题。
- 便携式 – >如果一种编程语言/技术满足上述两个特征,则称它们是纯粹的便携式。
.class文件是可移植的,因为它可以在任何操作系统上运行。 原因是,JVM生成的.class文件对于所有操作系统都是相同的。 另一方面,JVM与OS不同,但它为所有操作系统生成相同的.class文件,因此JVM是架构中立的。
Architecture Neutral和Portable之间有什么区别? 架构中立:Java是一种架构中立的编程语言,因为java允许其应用程序在一个硬件架构上编译并在另一个硬件架构上执行。 Portable:Java是一种可移植的编程语言,因为java能够执行其应用程序以及所有操作系统和所有硬件系统。
在Java方面
Java Architecture Neutral – 这里我们讨论的是操作系统架构,即java生成中间字节码(二进制代码)(由JVM处理),并允许java代码在任何具有Java虚拟机的操作系统上运行可用(无论其操作系统架构如何处理内存分配,兑现,寄存器处理,位代码处理32位或64位,同时解释代码,如每个解释器逐行执行代码 – 这是jvm关于硬件和操作系统的处理配置)。
便携式(通用意义,如可转移,平台无关,甚至在源代码方面都是固定的,即简单意味着对许多人的支持)
Java Portable意味着在一台机器上编写java机器代码,并且可以在任何具有适当操作系统JVM的机器上运行