我想知道两者之间是否存在任何性能差异
String s = someObject.toString(); System.out.println(s);
和
System.out.println(someObject.toString());
看生成的字节码,好像有区别。 JVM 是否能够在运行时优化此字节码以使两种解决方案提供相同的性能?
在这种简单的情况下,当然解决方案 2 似乎更合适,但有时出于可读性目的我更喜欢解决方案 1,我只是想确保不要在关键代码部分引入性能“下降”。
最佳答案
临时变量(尤其是像字符串这样小的变量)的创建对您的代码速度来说无关紧要,因此您不必为此担心。
尝试测量您在这部分代码中花费的实际时间,我敢打赌您会发现根本没有性能差异。调用 toString()
并打印出结果所花费的时间比存储临时值所花费的时间要长得多,而且我认为您不会在这里找到可衡量的差异全部。
即使字节码在这里看起来不同,那是因为 javac
是天真的,而您的 JIT 编译器为您做了繁重的工作。如果这段代码真的对速度很重要,那么它将被执行很多很多次,并且您的 JIT 将选择它来编译为 native 代码。很可能这两者都编译为相同的 native 代码。
最后,为什么要在性能关键代码中调用 System.out.println()
?如果这里有任何东西会影响您的表现,那就是。
关于Java优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/943331/