Java J2ME中哪个循环最快?
J2ME中有Java J2ME中哪个循环最快?,java,java-me,Java,Java Me,J2ME中有for、while和do while。其中哪一个是最快的?除非您有一些通常不可用的信息,否则这些循环在性能方面都是相同的 循环开销通常不是性能瓶颈。最重要的是使用最简单、最清晰的循环解决问题 我建议for在概念上更长,因为它可以用于初始化变量。相反,如果在循环之前初始化一个变量,它将是相同的 如果您比较 public static void main(String... args) { for (int i = 0; i < 10; i++) { }
for
、while
和do while
。其中哪一个是最快的?除非您有一些通常不可用的信息,否则这些循环在性能方面都是相同的
循环开销通常不是性能瓶颈。最重要的是使用最简单、最清晰的循环解决问题 我建议
for
在概念上更长,因为它可以用于初始化变量。相反,如果在循环之前初始化一个变量,它将是相同的
如果您比较
public static void main(String... args) {
for (int i = 0; i < 10; i++) {
}
int i = 0;
while (i < 10) {
i++;
}
}
您可以看到字节码完全相同
do/while非常相似,但不同之处在于它不会在第一次迭代时进行检查。如果您总是希望至少循环一次,那么do/while是正确的循环使用方法,不是因为它更快,而是因为它更清晰。在生成的字节码中,它们非常相似,即没有区别。1)一般来说,在这个级别上通过手动优化来提高性能在任何使用优化编译器的语言中都是浪费时间。2) 对于真正的性能瓶颈在哪里,典型的开发人员的直觉不是很好/准确。3) 不首先测量性能(即评测)的手动优化通常是浪费时间。吹毛求疵地说,循环开销不是性能瓶颈。循环本身通常是性能瓶颈(这就是为什么我们使用大O表示法来分析时间复杂性),但是,正如您所说的,使用不同类型的循环不会改变这一点。
public static void main(java.lang.String...);
0: iconst_0
1: istore_1
2: iload_1
3: bipush 10
5: if_icmpge 14
8: iinc 1, 1
11: goto 2
14: iconst_0
15: istore_1
16: iload_1
17: bipush 10
19: if_icmpge 28
22: iinc 1, 1
25: goto 16
28: return