我想知道之间是否有任何性能差异
和
查看生成的字节码,它似乎有不同之处。JVM能够在运行时优化这个字节码以使这两种解决方案提供相同的性能吗?
当然,在这种简单的情况下,解决方案2似乎更合适,但为了可读性起见,有时我更喜欢解决方案1,我只想确保在关键代码部分不引入性能“降低”。
发布于 2009-06-03 06:34:24
创建一个临时变量(特别是像字符串这样小的变量)与代码的速度无关,所以您应该停止担心这个问题。
尝试测量在代码的这一部分中花费的实际时间,我敢打赌,您将发现性能根本没有差别。调用toString()并打印出结果所需的时间远远长于存储临时值所需的时间,而且我认为您在这里根本找不到可测量的差别。
即使字节码在这里看起来不一样,这是因为javac太天真了,而且您的JIT编译器为您做了繁重的工作。如果这段代码对速度非常重要,那么它将被执行很多次,而您的JIT将选择它来编译成本机代码。很可能这两种代码都编译成相同的本机代码。
最后,为什么要在性能关键代码中调用System.out.println()?如果这里有什么东西会毁了你的表演,那会的。
发布于 2009-06-03 06:28:29
如果您有要求性能的关键代码部分,请避免使用System.out.println()。与变量赋值相比,使用标准输出会产生更多的开销。
做解决方案1。
编辑:或解决方案2
发布于 2009-06-03 06:30:10
没有足够关键的代码,以至于您的两个示例之间的差异会造成任何不同。我鼓励您对此进行测试;同时运行数百万次,并记录所需时间。
选择更具可读性和可维护性的表单。
*夸大了效果。如果你有足够重要的代码,你已经学习了它来学习它。
https://stackoverflow.com/questions/943331
复制相似问题