Java 64位计算机如何处理长整数?如何确定对象的大小?
Q1:如果我的计算机有32位处理器,如何存储并使用64位的Java 64位计算机如何处理长整数?如何确定对象的大小?,java,object,long-integer,primitive,bits,Java,Object,Long Integer,Primitive,Bits,Q1:如果我的计算机有32位处理器,如何存储并使用64位的long类型进行处理? 另一方面,如果我在64位处理器中只使用int类型,我不是在浪费32位内存吗 Q2:对于原语,我们说byte是8位,int是32位。我们如何对物体说同样的话?有没有一种方法可以获得Java中对象的大小。或者物体的最大尺寸是多少?关于第二个问题,请参见 对于第一个问题,32位处理器不能直接处理64位整数,因为64位操作数不能“作为一个整体”存储在32位寄存器中。编译器通过将64位操作转换为代表64位操作数一半的32位操
long
类型进行处理?
另一方面,如果我在64位处理器中只使用int
类型,我不是在浪费32位内存吗
Q2:对于原语,我们说
byte
是8位,int
是32位。我们如何对物体说同样的话?有没有一种方法可以获得Java中对象的大小。或者物体的最大尺寸是多少?关于第二个问题,请参见
对于第一个问题,32位处理器不能直接处理64位整数,因为64位操作数不能“作为一个整体”存储在32位寄存器中。编译器通过将64位操作转换为代表64位操作数一半的32位操作数上的一系列操作来解决此问题。有关详细的解释,请参阅
在Java中,
long
保证正好是64位,int
保证正好是32位。在32位机器上使用64位整数可能会影响性能,但考虑到Java的性质,我认为这不会太明显(可能在数字运算应用程序中)。Java有意采用固定大小的数据类型。其中,在Cint
中,int的大小可能会有所不同,而javaint总是有符号的32位。因此,剩下的问题与实施有关
这可能会有所不同。但是,看看JVM字节码指令,可以做出一些决定。
byte
类型的局部变量可以存储在int(32位)中。等等此外,Oracle 64位java还可以选择使用32位而不是64位作为对象引用,这大大节省了内存。请澄清您的问题;1它是一个虚拟机。2是的。将其序列化为一个ByteArrayOutputStream
,并在完成后获取数组的长度。。。但为什么?可能重复“外部地址和数据总线通常大于32位,但它们都作为32位量在处理器内部存储和操作。”您能否解释一下64位作为两个32位字存储在32位处理器中的时间长度,以及如果处理器没有64位加法,完成两个32位加法。Java字节码主要进行解释,并使用即时热点编译器将其转换为机器代码。几乎和任何成熟的编程语言一样,它可以做所有的事情。有用于16位处理器的JVM(可能不再有)。