2016-04-24 85 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(),因爲這樣每次都會創建一個新數組(並因此導致大量垃圾)。我建議你將這個數組緩存在某個不會被修改的地方。