Java优化

标签 java optimization jit

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

  1. String s = someObject.toString(); System.out.println(s);

  2. 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/

相关文章:

java - findElements() 返回 NoSuchElementException 而不是返回空列表

java - 来自对象、泛型类和通配符的未经检查的强制转换

python - Python中全局变量和局部变量的速度

api - 使用 clang API 编译和运行 C 代码

php - 安装和卸载 Xdebug 后修复 JIT

pytorch - torchscript中的torch.jit.trace和torch.jit.script有什么区别?

java - 为什么list上stream操作时生成的map顺序不对

java - 此 URL 不支持 HTTP 方法 GET,状态 405

android - 在 Api Map V2 Android 上绘制多边形时出现性能问题

algorithm - 二分图算法