首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java短整型、长型性能

问java短整型、长型性能
EN

Stack Overflow用户
提问于 2010-03-05 00:00:38
回答 6查看 18.3K关注 0票数 13

我读到JVM在内部存储了短整型和长型4个字节。我是从2000年的一篇文章中读到的,所以我不知道它现在是不是真的。

对于较新的JVM,使用短整型/长整型有什么性能上的提升吗?自2000年以来,实现的这一部分是否发生了变化?

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-05 00:07:56

代码语言:javascript
复制
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 

使用你需要的,我会认为短裤很少使用,因为它的范围很小,而且是大端格式。

任何性能提升都将是微乎其微的,但就像我说的,如果你的应用程序需要比int更短的范围。对于您来说,long类型可能太大了;但这完全取决于您的应用程序。

如果您对空间(内存)有顾虑,则应该只使用,否则使用(大多数情况下)。如果您正在创建数组之类的,可以通过声明int和short类型的数组来尝试一下。Short将使用1/2的空间,而不是int。但是,如果您基于速度/性能运行测试,您将看到很少或没有区别(如果您处理数组),此外,您唯一节省的就是空间。

还有一位评论员提到了long,因为long是64位。您将无法以4字节存储long的大小(请注意long的范围)。

票数 13
EN

Stack Overflow用户

发布于 2010-03-05 00:11:49

整数类型存储在许多字节中,具体取决于确切的类型:

  • 字节8位
  • 短16位,带符号
  • 整数32位,带符号
  • 长64位,带符号

请参阅spec here。

至于性能,这取决于你对它们做了什么。例如,如果您将一个文字值赋给一个字节或短字节,它们将被提升到int,因为在默认情况下,文字值被视为int。

代码语言:javascript
复制
byte b = 10;  // upscaled to int, because "10" is an int

这就是为什么你不能这样做:

代码语言:javascript
复制
byte b = 10;
b = b + 1;  // Error, right member converted to int, cannot be reassigned to byte without a cast.

因此,如果您计划使用字节或短整型来执行一些循环,您将不会获得任何东西。

代码语言:javascript
复制
for (byte b=0; b<10; b++) 
{ ... } 

另一方面,如果您使用字节数组或shorts数组来存储某些数据,您将明显受益于它们的减小大小。

代码语言:javascript
复制
byte[] bytes = new byte[1000];
int[] ints = new int[1000];  // 4X the size

因此,我的答案是:这取决于:)

票数 15
EN

Stack Overflow用户

发布于 2010-03-05 00:15:52

这是一个实现细节,但出于性能原因,大多数JVM将为每个变量使用一个完整的字(或更多),这仍然是事实,因为CPU以字为单位访问内存。如果JVM将变量存储在子字单元和位置中,那么它实际上会更慢。

这意味着32位JVM将使用4个字节(甚至布尔值),而64位JVM将使用8个字节。然而,对于数组元素就不是这样了。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2380696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档