小编典典

Java优化

java

我想知道两者之间是否有任何性能差异

  1. 字符串s = someObject.toString(); System.out.println(s);

  1. System.out.println(someObject.toString());

查看生成的字节码,似乎有所不同。JVM是否能够在运行时优化此字节码,以使两个解决方案提供相同的性能?

在这种简单情况下,当然解决方案2似乎更合适,但有时出于可读性考虑,我更喜欢解决方案1,而我只是想确保不要在关键代码部分引入性能“降低”的情况。


阅读 232

收藏
2020-11-30

共1个答案

小编典典

临时变量(尤其是像String这样小的变量)的创建与代码的速度无关紧要,因此您不必再为此担心。

尝试测量在这部分代码中花费的实际时间,我敢打赌,您会发现根本没有性能差异。调用toString()和打印结果所花费的时间比存储临时值所花费的时间要长得多,而且我认为您根本不会在这里找到可测量的差异。

即使字节码在这里看起来有所不同,这也是因为它javac很幼稚,您的JIT编译器为您完成了繁重的工作。如果此代码确实对速度很重要,那么它将执行很多次,并且您的JIT将选择它以编译为本机代码。两者很可能都编译为相同的本机代码。

最后,为什么要调用System.out.println()关键性能代码?如果这里有任何事情会影响您的表现,那将会。

2020-11-30