三值运算符的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中引入的框架。这会给你一些钱。这些数字仍然是特定于设置的,与您的应用程序无关。然而,测量部分将是准确的
javac
或Eclipse编译器从源代码创建的字节码,由于优化的不同也可能不同。你能确切地说一下你指的是哪种编译器吗?你可以告诉虚拟机记录任何jit:ing并亲自查看。请注意,无法保证这一实现方式不会随时间而改变。有关更多信息,请参见此处:顺便说一下,在第一个代码段中,name
是一个有效的最终变量,但在第二个代码段中不是。