java中short能优化int吗_性能 – 在java中,使用byte或short而不是int和float而不是double来更高效?...

Am I wrong in assuming it should be faster and more efficient? I’d hate to go through and change everything in a massive program to find out I wasted my time.

简短的答案

是的,你错了。在大多数情况下,它在使用的空间方面没有什么区别。

不值得尝试优化这个…除非你有明确的证据表明需要优化。如果你确实需要优化对象字段的内存使用,你可能需要采取其他(更有效)的措施。

更长的答案

Java虚拟机使用偏移量(实际上是32位原始单元大小的倍数)来模型堆栈和对象字段。所以当你声明一个局部变量或对象字段为(比方说)一个字节时,变量/字段将被存储在一个32位的单元格,就像一个int。

这里有两个例外:

> long和double值需要2个原始32位单元格

>原始类型数组以打包形式表示,因此(例如)一个字节数组每32位字保存4个字节。

所以它可能值得优化使用long和double …和大型数组的基元。但一般没有。

在理论上,JIT可能能够优化这一点,但在实践中我从来没有听说过JIT。一个障碍是JIT通常不能运行,直到已经创建了被编译的类的实例。如果JIT优化了内存布局,你可能有两个(或更多)同类对象的“风味”,这将带来巨大的困难。

再访

看看@ meriton的答案中的基准测试结果,似乎使用short和byte而不是int会对乘法造成性能损失。事实上,如果你孤立地考虑运作,惩罚是重要的。 (你不应该…但这是另一回事)。

我认为解释是JIT可能在每种情况下使用32位乘法指令进行乘法。但是在字节和短的情况下,它执行额外的指令以在每个循环迭代中将中间32位值转换为字节或短。 (理论上,转换可以在循环结束时进行一次…但我怀疑优化器能够找出这一点。)

无论如何,这指向另一个问题,切换到短和字节作为优化。它可以使性能更糟糕…在算法和算法密集型算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值