即时编译
JIT compilation
不知道这样的构造是不是:
for (Suits suit : Suits.values()) {
// do stuff
}
将立即编译为:
Suits[] suits = Suits.values();
for (Suits suit : suits ) {
// do stuff
}
我明白,经过一些循环后它们会被编译成第二个变体,但是它会发生在第一个循环中吗?
第一个编译阶段是 javac
编译器。您应该注意到,当 for-each
构造作为句法添加时,不需要对底层字节代码进行任何更改,并且这些代码的编译基本相同。
这是 JIT 优化代码之前的很久。
注意:如果您关心性能,最后要做的就是调用 Enum.values()
,因为这每次都会创建一个新数组(结果会产生很多垃圾)。我建议您将此数组缓存在不会被修改的地方。
不知道这样的构造是不是:
for (Suits suit : Suits.values()) {
// do stuff
}
将立即编译为:
Suits[] suits = Suits.values();
for (Suits suit : suits ) {
// do stuff
}
我明白,经过一些循环后它们会被编译成第二个变体,但是它会发生在第一个循环中吗?
第一个编译阶段是 javac
编译器。您应该注意到,当 for-each
构造作为句法添加时,不需要对底层字节代码进行任何更改,并且这些代码的编译基本相同。
这是 JIT 优化代码之前的很久。
注意:如果您关心性能,最后要做的就是调用 Enum.values()
,因为这每次都会创建一个新数组(结果会产生很多垃圾)。我建议您将此数组缓存在不会被修改的地方。