2013-03-08 78 views
1

快速性能/內存問題:Java中的可變示波器效率

有什麼更好的,如果甚至有差異?

int x; 
for (int i = 0; i < 10000; i++) 
{ 
x = i; 
//do something 
} 

或本

for (int i = 0; i < 10000; i++) 
{ 
int x = i; 
//do something 
} 

+0

你試過了嗎?幾乎肯定沒有區別。 – 2013-03-08 00:04:05

+0

@CarlNorum:原始人,當然。重量級對象?更少。 – Makoto 2013-03-08 00:05:03

+0

如果存在差異,則可以忽略不計。所以更喜歡第二個,這限制了x的範圍。調整你的IO和你的算法。像這樣的微型優化不會對性能產生任何顯着影響,但會對代碼可讀性和健壯性產生影響。 – 2013-03-08 00:05:09

回答

3

我認爲它們在彙編方面都是相同的(它的速度更快,只是執行大的堆棧推送,而不是一堆推送局部變量的POP)。在第二種情況下,它只會縮小x的範圍,即使它們都產生相同的字節碼。

+1

它如何產生相同的字節碼但限制了範圍? – 2013-03-08 00:08:57

+0

編譯器很聰明 - 如果他們看到你在循環之後不使用它們 - 它們會限制你的範圍。 – ddmps 2013-03-08 00:14:10

+0

@JasonSperske該變量只是堆棧中的偏移量。它通過忘記循環外存在的變量來限制範圍。 – 2013-03-08 01:11:12

3

完全一樣......定義一個變量(基元/引用)只是計算它將存活的位置(作爲堆棧指針的偏移量)。這是由編譯器完成的。