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

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

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

【问题讨论】:

标签: java object long-integer primitive bits


【解决方案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(可能没有更多)。
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2013-05-30
    • 2014-05-27
    • 2016-08-17
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多