Java 如果我使用byte而不是int,循环的迭代速度会更快吗?
这个代码Java 如果我使用byte而不是int,循环的迭代速度会更快吗?,java,Java,这个代码 for (byte b = 0; b < 100; b++) { //some code } for(字节b=0;b
for (byte b = 0; b < 100; b++)
{
//some code
}
for(字节b=0;b<100;b++)
{
//一些代码
}
运行速度是否比此代码快
for (int b = 0; b < 100; b++)
{
//some code
}
for(int b=0;b<100;b++)
{
//一些代码
}
不,一点也不;如果有什么区别的话,它的速度会慢一些,因为底层硬件通常都有使用本机“int”类型(32位2的补码整数)的指令,但没有使用8位有符号字节的指令
尽可能始终使用int数据类型作为循环索引变量,因为与使用byte或short数据类型相比,它是有效的。因为当我们使用byte或short数据类型作为循环索引变量时,它们涉及隐式类型转换为int数据类型
检查这个
优化代码的正确方法是对代码进行分析并找出热点,即占用大部分时间的地方。这些可能是(通常是)数据库或网络操作,或者是对大量数据进行操作的糟糕算法。找到热点后,可以对其进行进一步分析,以找到使其更快的方法(修改数据库查询、使用缓存等)
优化不是决定是否使用
byte
而不是int
,或者是否使用StringBuilder
而不是StringBuffer
。这就是所谓的微观优化,毫无价值。优化始终依赖于上下文,不能使用常规的“使用X代替Y”或“始终执行Z”规则执行。测量时间并检查它。我想这比在这里发帖要快。重复问题:答案是一个大大的否。@reinder这不是重复的问题。这要求内存不足,这要求速度。好点+1。但是,当您从其他链接粘贴时,请引用它们。我现在就这么做了。这个建议毫无价值,因为JIT肯定会将循环编译成一种有效的形式。对于Android系统来说,也是一样的?不仅是底层硬件,甚至Java字节码本身都有一个主要用于int
的指令集。在for
循环中使用int
意味着单个iinc
指令将执行循环的增量操作,但当使用字节时,使用四个指令序列iload
,iconst\u 1
,iadd
,i2b
,istore
是必需的。我用System.nanoTime()计算了时差,结果两边都有偏差,顺便说一句,你刚才的回答赢得了一个粉丝。我说的是“四”吗?甚至五条指令;-)