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 位计算机如何处理长整数?如何确定对象的大小? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章