“architecture-neutral”和“portable”有什么区别?

问题描述:

我正在阅读Herbert Schildt的书“Java:The Complete Reference”,他在那里写道Java是可移植的并且与架构无关。这两个概念有什么区别?我无法从文本中理解它。“architecture-neutral”和“portable”有什么区别?

看看这个white paper on Java

基本上他们说除了在多个环境中运行(因为在JVM中被解释)之外,它也运行相同而不管环境如何。前者是它的便携性,后者是使其与建筑无关的原因。例如,int的大小不会基于平台而变化;它由JVM建立。

+0

伟大的链接,谢谢! – Sergey 2011-04-28 04:17:02

+1

我觉得它含糊不清,但两者基本上都是一样的。可以移植到任何架构。 – xploreraj 2016-07-25 11:31:01

+0

没有。如果一个程序可以移植到任何体系结构中,但是在不同的体系结构上运行的方式会有所不同,而不是与体系结构无关。 – 2016-07-25 12:31:38

本书意味着字节码独立于程序运行的底层平台,与架构无关。例如,如果您的操作系统是32位或64位,则Java字节代码是完全相同的。您不必重新编译32位或64位的Java源代码。 (所以,“架构”是指CPU架构)。

“便携式”意味着一个编写为在一个操作系统上运行的程序可以在另一个操作系统上运行而不会改变任何内容。使用Java,您甚至不必重新编译源代码;例如,在Windows上编译的* .class文件适用于Linux,Mac OS X或您拥有Java虚拟机的任何其他操作系统。

请注意,您必须注意一些事情,以使Java代码真正可移植。例如,如果您在Java应用程序中硬编码Windows风格的文件路径(C:\ Users \ Myself ...),则无法在其他操作系统上运行。

我怀疑他意味着代码可以在许多平台上运行而无需重新编译。 也可以编写处理底层系统的代码而不用重写或条件。

E.g.来自32位Windows系统的序列化对象可以在64位Linux系统上读取。

环顾四周,我发现了另一本书,描述了两者之间的区别。

对于架构中立,编译器将生成一个与架构无关的对象文件,这意味着编译的Java代码(字节码)可以在许多处理器上运行,因为存在Java运行时。

对于便携式,这意味着规范中没有实现相关的方面。例如,在C++中,int可以是16位或32位,取决于谁在实现规范,因为在Java中,int总是32位。

我从另一本书(Core Java 2:Fundamentals)中获得了我的信息,因此它可能与他的含义有所不同。这里是一个链接:Core Java 2: Fundamentals

可移植的C程序:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    printf("Hello, World!"); 

    return (EXIT_SUCCESS); 
} 

您可以采取的C程序和一个C语言编译器编译它在任何机器上就了事(假设它支持的printf ...我猜测一些事情可能没有)。

如果你在Windows上编译它并尝试在Mac上运行该二进制文件,它将无法工作。

用Java编写的相同类型的程序也可以在任何安装了Java编译器的机器上编译,但生成的.class文件也可以在任何带有Java VM的机器上运行。这是建筑中立的部分。

所以,便携式是一个源代码的想法,而建筑中立是一个可执行的想法。

+0

用于在此场景中比较C和java的+1 ... – iAmLearning 2014-03-12 11:08:44

java中有3个相关的特性。

  1. 平台无关 - >这意味着Java程序可以在任何操作系统上运行,而无需考虑其供应商。它通过使用称为“BYTE CODE”的MAGIC CODE来实现。 JVM然后在运行时解释它,或使用JIT(Just in Time)编译将其编译为正在运行的体系结构(例如i386)的机器代码。
  2. 架构中立 - >这意味着Java程序可以在任何处理器上运行,而不考虑其供应商和体系结构。所以它避免了重建问题。
  3. 便携式 - >如果一个编程语言/技术满足上述两个特点,就被认为是纯便携式的。

.class文件是可移植的,因为它可以在任何操作系统上运行。原因是,由JVM生成的.class文件对于所有操作系统都是相同的。另一方面,JVM与操作系统不同,但它为所有操作系统生成相同的.class文件,因此JVM在架构上保持中立。

Architecture Neutral和Portable之间的区别是什么? 架构中立:Java是架构中立的编程语言,因为Java允许其应用程序在一个硬件架构上编译并在另一个硬件架构上执行。便携式:Java是一种可移植的编程语言,因为Java能够执行其应用程序以及所有操作系统和所有硬件系统。

在条款的Java

Java体系结构中立的 - 在这里,我们正在谈论的操作系统架构即Java的生成中间字节码(二进制代码)(由JVM处理),并允许Java代码在任何可以使用Java虚拟机的操作系统上运行(不论其OS操作系统体系结构如何处理内存分配,兑现,注册处理,处理32位或64位位代码,同时解释代码就像每个解释器一行一行地执行代码 - 这是由jvm在硬件和操作系统配置方面的处理)。

便携式(如转移,平台无关,甚至在源代码中的条款一般含义是解决所有,即简单地意味着许多支持)

Java的便携式装置在一台机器渣机代码编写和运行在任何具有适当操作系统的JVM的机器上