三值运算符的Java JIT编译器优化

三值运算符的Java JIT编译器优化,java,eclipse,ternary-operator,jit,Java,Eclipse,Ternary Operator,Jit,在使用三元运算符时,编写如下代码非常方便 String name = employee.getName() != null ? employee.getName() : ""; String name = employee.getName(); if (name == null) { name = ""; } 比(大多数情况下)更高效的代码 String name = employee.getName() != null ? employee.getName() : ""; Str

在使用三元运算符时,编写如下代码非常方便

String name = employee.getName() != null ? employee.getName() : "";
String name = employee.getName();
if (name == null) {
    name = "";
}
比(大多数情况下)更高效的代码

String name = employee.getName() != null ? employee.getName() : "";
String name = employee.getName();
if (name == null) {
    name = "";
}
Q1。我想知道JIT编译器如何优化此代码

在试图通过互联网找到答案时,尽管我找到了一些参考资料,但它们并没有涵盖这个特定的案例

即使我得到了答案,我也很高兴


Q2.了解JIT编译器优化的最简单方法。(eclipse插件的某个工具。)

我将给出臭名昭著的堆栈溢出答案:“错误的方法,做点别的”

为什么不这样做呢 你想在这里做的事情,叫做微基准标记。Brian Goetz写了一篇文章,解释为什么这通常是个坏主意。以下是一些亮点:

  • 优化也取决于您的操作系统和硬件
  • 对于大多数应用程序,这种加速并不重要
  • 仅仅衡量你感兴趣的东西真的很难
该怎么办 您可以测量您的应用程序。您可以通过以下工具找到应用程序中的瓶颈:如。然后你可以优化这个部分。优化通常是创造性的,比如使用缓存,或者只缩放系统的特定部分

但你真的想做微基准测试吗 在这种情况下,您可以执行以下两项操作:

  • 阅读字节码,并尝试猜测在您的设置(操作系统+硬件)中哪个更快
  • 使用java中引入的框架。这会给你一些钱。这些数字仍然是特定于设置的,与您的应用程序无关。然而,测量部分将是准确的

即时(JIT)编译器在字节码上工作,而不是在源代码上,并且是Java虚拟机的一部分(例如,热点或应用程序)。即使是由
javac
或Eclipse编译器从源代码创建的字节码,由于优化的不同也可能不同。你能确切地说一下你指的是哪种编译器吗?你可以告诉虚拟机记录任何jit:ing并亲自查看。请注意,无法保证这一实现方式不会随时间而改变。有关更多信息,请参见此处:顺便说一下,在第一个代码段中,
name
是一个有效的最终变量,但在第二个代码段中不是。