![]() |
1
44
JLS将指定语句所需的行为。但是,如何实现它们是编译器和JVM的实现细节。 在实践中,任何值得一试的编译器都应该为这些语句发出相同的字节码。即使没有,JVM也会对它们进行适当的优化。
另外,回答这个问题的一个更好的方法是检查你自己,使用
更新: 回答你关于“学术”问题的问题。如上所述,JLS只关注行为。标准中没有实际规定应该如何实现的内容(好吧,JVM提供了很多指导)。 只要编译器保持相同的行为,编译器就可以自由地实现不同的行为,可能具有不同的运行时性能。 |
![]() |
2
12
编译器应该在内部解析为相同的代码,因此没有区别。 |
![]() |
3
0
尝试 decompiling the byte code 看看代码看起来有多不同。我猜编译将以几乎相同的方式解决它们,任何细微的差异都将导致可忽略的性能差异。 |
![]() |
4
0
好的,更完整的答案是: 如果任何编译器为这些变化生成不同的字节码,我会非常惊讶。对于任何感兴趣的人来说,使用拆卸器检查应该足够容易。 考虑到这两个表达式(很可能)都编译到同一个字节码,我希望在大小或性能上没有差别。 |
![]() |
5
0
捷豹路虎说
在非案例和比较对象案例中,需要对表达式进行评估,然后将其与true进行比较。如果您检查的是一个值,而不是对它执行一个运算符,那么当表达式评估变成一个非操作时,可能会有一个理论上的性能优势。 但在本例中,我希望JIT为两个表达式生成相同的字节码。 |
![]() |
6
0
在这两个结果中生成的字节码应该没有区别,除非它是为一个资源非常有限的设备创建代码(在这种情况下,你不应该在爪哇写),否则差异是微不足道的,你应该决定写这两个代码的哪一个方法是一个更明显的解决方案。 |
![]() |
7
0
思考微观优化几乎在任何情况下都是浪费时间,并导致以错误的方式思考… |
![]() |
8
0
我问了一个类似的问题关于C++/VS2008。 Would VS2008 c++ compiler optimize the following if statement? 在C++中避免V= V==TyPOS,您倾向于写
等。 在您习惯之前,它的可读性稍差。 |
![]() |
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
![]() |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
![]() |
Prince · 复制大型文件需要更多时间 2 年前 |
![]() |
Sagar · 为什么在循环之外声明变量会更快? 3 年前 |
![]() |
seco · 如何在不挂起页面的情况下加载JS 3 年前 |