Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 64位计算机如何处理长整数?如何确定对象的大小?_Java_Object_Long Integer_Primitive_Bits - Fatal编程技术网

Java 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位操

Q1:如果我的计算机有32位处理器,如何存储并使用64位的
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有意采用固定大小的数据类型。其中,在C
int
中,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(可能不再有)。