bob*_*bob 13 java performance integer short long-integer
我读到JVM存储内部短,整数和长4个字节.我从2000年的一篇文章中读到它,所以我不知道它现在是多么真实.
对于较新的JVM,使用short over integer/long是否有任何性能提升?自2000年以来,实施的这一部分是否发生了变化?
谢谢
Oli*_*ier 15
整数类型存储在许多字节中,具体取决于确切的类型:
至于性能,它取决于你正在做什么.例如,如果要将字面值分配给字节或短字节,则它们将被升级为int,因为默认情况下文字值被视为int.
byte b = 10; // upscaled to int, because "10" is an int
Run Code Online (Sandbox Code Playgroud)
这就是为什么你做不到的原因:
byte b = 10;
b = b + 1; // Error, right member converted to int, cannot be reassigned to byte without a cast.
Run Code Online (Sandbox Code Playgroud)
因此,如果您计划使用字节或短路来执行某些循环,那么您将无法获得任何收益.
for (byte b=0; b<10; b++)
{ ... }
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您使用字节或短路数组来存储某些数据,您显然会从缩小的尺寸中受益.
byte[] bytes = new byte[1000];
int[] ints = new int[1000]; // 4X the size
Run Code Online (Sandbox Code Playgroud)
所以,我的答案是:这取决于:)
Jon*_*onH 13
long 64 –9,223,372,036,854,775,808 to 9 ,223,372,036,854,775,807
int 32 –2,147,483,648 to 2,147,483,647
short 16 –32,768 to 32,767
byte 8 –128 to 127
Run Code Online (Sandbox Code Playgroud)
使用你需要的东西,我认为由于范围较小而很少使用短裤,而且它采用大端格式.
任何性能提升都是最小的,但就像我说的那样,如果你的应用程序需要的范围比使用int的短范围更大.长型对你来说可能太大了; 但这一切都取决于你的申请.
如果您对空间(内存)有顾虑,则应该只使用short,否则使用int(在大多数情况下).如果你正在创建数组,那么通过声明int和short类型的数组来尝试它.Short将使用1/2的空间而不是int.但是如果你根据速度/性能运行测试,你将看到很少甚至没有区别(如果你正在处理数组),此外,你唯一能节省的是空间.
也是评论员提到的很长,因为长是64位.您将无法以4个字节存储长的大小(请注意长的范围).
这是一个实现细节,但出于性能原因,大多数JVM都会为每个变量使用一个完整的单词(或更多),因为CPU以字为单位访问内存.如果JVM将变量存储在子字单元和位置中,它实际上会更慢.
这意味着32位JVM将使用4个字节(甚至是布尔值),而64位JVM将使用8个字节.但是,对于数组元素也是如此.