Java优化

Man*_*lva 1 java optimization jit

我想知道是否存在任何性能差异

  1. String s = someObject.toString(); 的System.out.println(一个或多个);

  2. 的System.out.println(someObject.toString());

看看生成的字节码,它似乎有差异.JVM是否能够在运行时优化此字节码以使两种解决方案都提供相同的性能?

在这个简单的情况下,当然解决方案2似乎更合适,但有时我更倾向于解决方案1以实现可读性,我只想确保不在关键代码部分中引入性能"降低".

Tod*_*lin 6

创建一个临时变量(特别是像String一样小的东西)对于代码的速度是无关紧要的,所以你应该不再担心这个问题.

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

即使字节码在这里看起来不同,也是因为javac天真并且你的JIT编译器为你做了繁重的工作.如果此代码对速度非常重要,那么它将被执行很多次,并且您的JIT将选择它以编译为本机代码.很可能这两个编译为相同的本机代码.

最后,为什么要调用System.out.println()性能关键代码?如果这里的任何东西会破坏你的表现,那就会.