【问题标题】:Primitive data types and portability in JavaJava中的原始数据类型和可移植性
【发布时间】:2014-08-26 05:15:02
【问题描述】:

我引用 Herbert Schildt 第 3 章数据类型、变量和数组:

原始类型表示单个值而不是复杂对象。 尽管 Java 在其他方面完全是面向对象的,但原语 类型不是。这种效率的原因。制作原语 类型会大大降低性能。

原始类型被定义为具有明确的范围和 数学行为。 C、C++ 等语言允许 整数根据执行环境的要求而变化。 但是,Java 不同。由于 Java 的可移植性要求, 所有数据类型都有严格定义的范围。例如,一个 int 是 无论特定平台如何,始终为 32 位。这允许 要编写的程序保证在不移植的情况下运行 任何机器架构。在严格规定尺寸的同时 在某些环境中,整数可能会导致性能损失很小,它 是实现可移植性所必需的。

最后两行是什么意思?在某些环境中,为什么指定整数的大小会导致性能损失很小?

【问题讨论】:

    标签: java


    【解决方案1】:

    在“低级”语言中,原始数据类型的大小通常源自 CPU 处理它们的能力。 例如,在 中,int 被定义为“至少 16 位大小”,但它的大小可能因架构而异,以确保“int 类型应该是目标处理器的整数类型”最有效的合作。” (source)。这意味着,如果您的代码对 int 的大小做出粗心的假设,那么如果您将其从 32 位 移植到 64 位 ,它很可能会崩溃。

    ,如上所述,是不同的。例如,int 将始终为 32 位。这意味着当您在不同的架构上运行相同的代码时,您不必担心它的大小会发生变化。如上所述,折衷是性能——在任何不能原生处理 32 位计算的架构上,这些ints 需要扩展到 CPU 可以处理的原生大小(这将有一个小的损失),或者更糟糕的是,如果 CPU 只能处理较小的 ints,则对 int 的每个操作都可能需要多个 CPU 操作。

    【讨论】:

      【解决方案2】:

      一些(非常少)computers use 36 bit architecture,所以你需要一个额外的步骤来屏蔽位、模拟溢出等。

      【讨论】:

        【解决方案3】:

        Java 在底层系统的指针机制之上实现了自己的数据指针机制。如果数据不够大,许多系统可能会使用较小的指针。

        例如: 如果您的整数数据只需要 16 位指针,系统只会在使用 16 位指针的地方分配所需的存储空间。但是如果您使用的是 Java,它会将 16 位指针分配转换为需要大内存空间的 32 位指针,这也会降低 存储数据搜索。因为您的指针

        【讨论】:

        • 此答案针对指针,但与整数无关。
        • @user949300,我认为这会导致性能下降。
        • 是的,但问题(正如我所读)是关于整数性能,而不是一般性能。
        【解决方案4】:

        AFAIK,java 中没有办法定义整数的大小。它始终是一个 32 位整数,如 mentioned 这里。但是某些编程语言可能允许指定整数的大小(例如:Ada)。

        当编译器尝试将我们的代码转换为machine code instructions 时,会出现性能问题(请参阅herehere)。通常机器代码指令是 32 位或 64 位。如果我们的整数与机器码中的大小相同,则很容易将它们转换为机器码。否则编译器需要付出额外的努力将它们转换为机器代码。这就是性能问题出现的时候。

        【讨论】:

        • 谢谢你的链接。它真的是一个额外的好处。还有一件事,Malenc,他所说的“没有移植”是什么意思
        • int 是 32 位,机器码是 32 位。这如何解释性能损失?
        • @Ansari,这是我正在解释的过程的一个词。见,en.wikipedia.org/wiki/Porting
        • @eldjon,并非所有机器都是 32 位的 - 请参阅我的回答。
        • @ShirgillAnsari,我想我已经对你的问题给出了合理的答案。如果您能接受我的回答,我很高兴。
        猜你喜欢
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 2011-09-04
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        相关资源
        最近更新 更多