64 位计算机如何处理长整数?如何确定对象的大小? [关闭]

Posted

技术标签:

【中文标题】64 位计算机如何处理长整数?如何确定对象的大小? [关闭]【英文标题】:How are long integers processed in 64 bit computers? How can I determine the size of an object? [closed] 【发布时间】:2014-01-25 17:49:55 【问题描述】:

Q1:如果我的电脑是32位处理器,64位的long类型如何存储和处理? 另一方面,如果我在 64 位处理器中只使用 int 类型,我不是在浪费 32 位内存吗?

Q2:对于原语,我们说byte 是 8 位,int 是 32 位。我们如何对对象说同样的话?有没有办法在 Java 中获取对象的大小。或者一个对象的最大尺寸是多少?

【问题讨论】:

请澄清您的问题; 1 它是一个虚拟机。 2 是的。将其序列化为 ByteArrayOutputStream 并在完成后获取数组的长度......但是为什么呢? Calculate size of Object in Java 的可能重复项 ***.com/questions/52353/… “外部地址和数据总线通常比 32 位更宽,但它们都在处理器内部以 32 位的形式存储和操作。” en.wikipedia.org/wiki/32-bit 【参考方案1】:

第二个问题请见this。

对于第一个问题,32 位处理器不能直接处理 64 位整数,因为 64 位操作数不能“作为一个整体”存储在 32 位寄存器中。编译器通过将 64 位操作转换为对代表 64 位操作数的一半的 32 位操作数的一系列操作来解决此问题。有关详细说明,请参阅this answer。

在 Java 中,long 保证为 64 位,int 保证为 32 位。在 32 位机器上使用 64 位整数可能会影响性能,但考虑到 Java 的性质,我认为这不会很明显(可能在数字运算应用程序中)。

【讨论】:

【参考方案2】:

Java 有固定大小的数据类型,有意。在 C 中,int 的大小可能会有所不同,而 java int 始终是 32 位有符号的。所以剩下的问题是关于实现的。

这可能会有所不同。但是看看 JVM 字节码指令,我们做出了一些决定。 byte 类型的局部变量可以存储在 int(32 位)中。等等。此外,Oracle 64 位 java 可以选择不使用 64 位进行对象引用,而是使用 32 位,从而大大节省内存。

【讨论】:

你能解释一下64位在32位处理器中存储多长时间 作为两个 32 位字,如果处理器没有 64 位加法,则进行两个 32 位加法。 Java 字节码主要被解释,并通过即时热点编译器翻译成机器码。作为几乎所有成熟的编程语言,它可以做所有事情。有 16 位处理器的 JVM(可能没有更多)。

以上是关于64 位计算机如何处理长整数?如何确定对象的大小? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

编程语言如何处理大数算术

如何以编程方式确定 Windows 中是不是安装了 Mono 64 位以及安装在何处?

64 到 32 位互操作 - 如何?

你如何处理 golang 中的 float64 比较?

怎么确定Java对象的大小

Mingw64 位 - 如何处理这个