Java类型的长类型

时间:2018-03-29 23:28:51

标签: java jvm

Oracle.com我看过:

  

如果可能的话,你应该避免使用long,因为即使在64位上,long在不同的操作系统上也有不同的大小。 Windows 64位平台将long定义为4个字节,但大多数Unix操作系统指定long的大小为8个字节。

  1. 这句话是什么意思?当我想存储超过~2 ^ 31的值时,JVM如何存储这个值?

  2. 在计算中,JVM使用RAX或EAX寄存器?

  3. 我知道BigInteger,但我对原始长型感兴趣。

1 个答案:

答案 0 :(得分:1)

你已经脱离了背景。完整的上下文是:

  

64位Java

     

本机代码如何受到影响?

     

...

     

将32位本机代码移植到64位Java平台时,您将会这样做   需要将代码修改为64位清理。这包括检查   你的C / C ++代码,并寻找假定大小为a的代码   指针是4个字节或指针可以转换和存储在一个   整数。移植32位时,长数据类型也很麻烦   码。 如果可能的话,你应该避免使用longs   即使在不同的操作系统中,多头也有不同的尺寸   64位。 Windows 64位平台将long定义为4个字节,但大多数   Unix操作系统指定long的大小为8个字节。 For   更多细节,请参阅以下链接了解更多信息   64位编程。

回答你的问题:

  

长型的Java大小?

所有平台上的Java long类型都是64位。

  

这句话是什么意思?

这是不言而喻的,但显然不是指Java long类型。它指的是在本机代码中使用C或C ++ long类型。

  

当我想存储超过~2 ^ 31的值时,JVM如何存储这个值?

在Java代码中,使用long。有用。 JVM实现在不同平台上以不同方式处理它。别担心。

在C / C ++本机代码中,如果您希望代码可移植,则会遇到问题。但是原始文章为您提供了帮助您解决问题的链接。

  

在计算中,JVM使用RAX还是EAX寄存器?

Java语言规范要求 long具有64位(不少于,不多)表示,并且所有long op long算术至少执行64位精度要求所有平台上的答案都是一样的。

实际实施取决于平台。 JVM / JIT编译器(很可能)将选择对当前平台最有效的寄存器和指令。

请记住,在3​​2位Windows Intel平台上运行的JVM与64位Windows Intel平台或Solaris,ARM等的JVM不同。对于其中许多平台,没有称为RAX和EAX的寄存器。

但是如果你真的需要知道,请查看源代码,或使用JVM选项转储JIT编译器发出的本机代码。