Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java所需的时间_Java_Micro Optimization - Fatal编程技术网

java所需的时间

java所需的时间,java,micro-optimization,Java,Micro Optimization,我想知道单独执行条件循环需要多少时间。 比如,如果我可以选择使用“if-else”、“while”、“for”或“foreach”循环,那么哪个循环执行得更快。我知道差别非常小,大多数人都会说这无关紧要,但如果我有一个可以访问数千个数据的程序,那么这一点就会显现出来 我想知道我是否在java的开头声明了一个变量,是否在使用它之前声明了它,这会有什么不同。所需的总时间是否会减少?如果是,那么实际使用的是哪一个(在开始时声明变量的那个,或者在刚声明b4时使用的那个)?停止微观优化 花时间为您的系统找

我想知道单独执行条件循环需要多少时间。 比如,如果我可以选择使用“if-else”、“while”、“for”或“foreach”循环,那么哪个循环执行得更快。我知道差别非常小,大多数人都会说这无关紧要,但如果我有一个可以访问数千个数据的程序,那么这一点就会显现出来

我想知道我是否在java的开头声明了一个变量,是否在使用它之前声明了它,这会有什么不同。所需的总时间是否会减少?如果是,那么实际使用的是哪一个(在开始时声明变量的那个,或者在刚声明b4时使用的那个)?

停止微观优化


花时间为您的系统找到最佳算法、最佳数据结构和最佳设计,并编写可读性最高的代码。在这些小事情上没有。尝试手动优化代码没有多大意义-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");

你为什么不了解自己呢?编写几个带有大循环的小程序并进行测量

差异将以微秒为单位,这意味着数千条记录意味着差异以毫秒为单位


花点时间思考为什么我首先需要读取/处理数千条记录?

在一般情况下无法回答,因为Hotspot可能会或可能不会对代码进行所有优化

正如Polygene润滑油公司所说,重要的是编写清晰简洁的代码——这不仅会让人类更容易理解(可以说是最重要的!),而且优化编译器也会更容易“理解”并转化为高效的代码


如果您有性能问题,那么是时候打开一个探查器,看看您的代码实际在哪里花费时间,并优化该部分。同样,这通常需要改进算法,而不是使用略微不同的原语。

我同意@Polygene和@péter Török

出于教育目的,您可以使用
javap
命令比较不同类型循环的编译代码:

$ javap -v YourClass

如果它们是相关的,差异将非常小:-)

如今,编写清晰、可维护的代码比考虑foreach循环和while循环之间的区别要重要得多

javac编译器将优化生成的字节码,因此不会有任何差异。另外,你使用的算法也非常具体

如果在开头声明变量(“开头”)可能会影响可见性,但可能不会影响应用程序的性能

无论如何,如果您对这种性能优化感兴趣,请查看Sun的Java VM白皮书:


另外,您可能还想看看java应用程序的“评测”,这样您就可以自己看到差异了。下面是一个开源Java评测工具列表:

让我们非常清楚。你在这里进行微优化。这是浪费时间。以下是优化规则:

  • 不要这样做
  • (仅限专家!)暂时不要这样做

  • 编写代码以使用好的算法。把代码写清楚。检查您是否仍然有问题。找出问题实际存在的地方。只有在你必须的时候才进行优化。(请注意,在现代计算机上获得良好的计时数据可能非常困难,特别是如果内存中有IDE等非琐碎的东西。)

    +1-JIT编译器可以比您做得更好、更一致的优化工作。事实上,Sun人员建议“聪明”的手工优化实际上会使JIT优化器更难完成其工作。同意。这些小细节可以随着版本的不同而变化(就像String/StringBuffer/StringBuilder一样)。使用“看起来更好”的代码。这有助于记住,作为程序员,做这些纳米优化并不是你的工作。你没有做这件事所需要的控制水平。这是虚拟机的工作。如果OP这样做,他几乎肯定会得出错误的结果。有关示例和推理,请参见。微基准在热点时代很难实现。虽然具有教育意义,但字节码在性能比较中并不是最有说服力的,因为真正的优化发生在JIT级别。@Tom:“纳米优化”?英雄联盟编写干净的代码。量。如果(编写程序时)存在性能问题,则可以考虑优化。+1 System.nanoTime()应优先于System.currentTimeMillis btw使用。