2016-04-24 88 views
1

我不知道这样的结构:JIT编译

for (Suits suit : Suits.values()) { 
     // do stuff 
} 

立即编译如下:

 Suits[] suits = Suits.values(); 
     for (Suits suit : suits) { 
      // do stuff 
     } 

我明白,他们将一些圈子之后被编译成第二个变体,但它会发生在第一个圆上吗?

回答

2

第一个编译阶段是javac编译器。您应该注意,当for-each构造被添加为语法时,不需要更改底层字节代码,这些编译基本上是相同的。

这是JIT优化代码之前很久。

注意:如果您担心性能,最后一次您想要做的就是调用Enum.values(),因为这样每次都会创建一个新数组(并因此导致大量垃圾)。我建议你将这个数组缓存在某个不会被修改的地方。