我想知道单独执行条件循环需要多长时间。 就像我可以选择使用“if else”,“while”,“for”或“foreach”循环那么循环会更快地执行。我知道差异会非常小,大多数人会说它不会但是,如果我有一个可以访问数千个数据的程序,那么这一点就会出现。
我想知道我是否在java的开头声明了一个变量,如果我在使用之前声明它就会有所不同。是否会减少所需的总时间?如果是,则实际使用哪一个(变量在开头被声明的那个或者它们刚被声明为b4的那个被使用)?
答案 0 :(得分:14)
停止微观优化。
花时间为系统寻找最佳算法,最佳数据结构和最佳设计,并编写最易读的代码。不是这些小事。
答案 1 :(得分:7)
尝试手动优化代码没有太大意义 - JIT编译器可能比你做得好得多。并非最不重要,因为它将在执行时获得有关确切环境的更多信息,而不是编译之前的信息。
此外,由于优化器针对“常见情况”进行了调优,因此对代码引入不常见的优化实际上可能会使JIT编译器的优化程度降低,因此最终会变慢。
尽管如此,如果你仍然 想要衡量某些东西,你可以这样做:
long before = System.currentTimeMillis();
// execute your code e.g. a million times
long after = System.currentTimeMillis();
System.out.println("Execution took " after - before " milliseconds");
答案 2 :(得分:2)
在一般情况下,无法回答,因为Hotspot可能会或可能不会对您的代码进行所有优化。
正如polygenelubricants所说,重要的是编写清晰简洁的代码 - 这不仅会使人们更容易理解(可能是最重要的事情!),但优化编译器“理解”和转向会更容易也是有效的代码。
如果你遇到了性能问题,那么是时候破解一个分析器了,看看你的代码实际上花了多少时间并优化那个部分。同样,这通常涉及改进算法而不是使用略有不同的原语。
答案 3 :(得分:2)
如果它们完全相关,差异将非常小: - )
现在编写清晰,可维护的代码比考虑foreach或while循环之间的差异要重要得多。
javac编译器将优化生成的字节码,因此不应有任何区别。此外,它还使用了哪些算法。
如果你在开头声明你的变量(?什么是“开头”),它可能会影响可见性,但可能不会影响你的应用程序的性能。
无论如何,如果您对此类性能优化感兴趣,请查看Sun的Java VM白皮书:http://java.sun.com/docs/performance/
另外,您可能希望查看“分析”您的Java应用程序,以便您可以自己查看差异。以下是开源Java分析工具列表:http://java-source.net/open-source/profilers
答案 4 :(得分:2)
让我们说清楚。你在这里进行微观优化。这是浪费时间。以下是优化规则:
写入代码以使用好的算法。编写代码要清楚。 检查您是否仍有问题。 测量以找出问题实际存在的位置。只有当你必须时才会优化和。 (并且要注意,在现代计算机上获得良好的时序数据可能非常困难,特别是如果你在内存中有非平凡的其他东西,比如IDE。)
答案 5 :(得分:0)
差异将以微秒为单位,暗示,数千条记录意味着以毫秒为单位的差异。
花点时间思考为什么我首先需要阅读/处理数千条记录?
答案 6 :(得分:0)
我同意@polygenelubricants和@PéterTörök。
出于教育目的,您可以使用javap
命令比较不同类型循环的编译代码:
$ javap -v YourClass
答案 7 :(得分:-1)
你为什么不发现自己?写一些带有大循环的smAll程序并进行测量!