快速性能/內存問題: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
}
?
快速性能/內存問題: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
}
?
我認爲它們在彙編方面都是相同的(它的速度更快,只是執行大的堆棧推送,而不是一堆推送局部變量的POP)。在第二種情況下,它只會縮小x的範圍,即使它們都產生相同的字節碼。
它如何產生相同的字節碼但限制了範圍? – 2013-03-08 00:08:57
編譯器很聰明 - 如果他們看到你在循環之後不使用它們 - 它們會限制你的範圍。 – ddmps 2013-03-08 00:14:10
@JasonSperske該變量只是堆棧中的偏移量。它通過忘記循環外存在的變量來限制範圍。 – 2013-03-08 01:11:12
完全一樣......定義一個變量(基元/引用)只是計算它將存活的位置(作爲堆棧指針的偏移量)。這是由編譯器完成的。
你試過了嗎?幾乎肯定沒有區別。 – 2013-03-08 00:04:05
@CarlNorum:原始人,當然。重量級對象?更少。 – Makoto 2013-03-08 00:05:03
如果存在差異,則可以忽略不計。所以更喜歡第二個,這限制了x的範圍。調整你的IO和你的算法。像這樣的微型優化不會對性能產生任何顯着影響,但會對代碼可讀性和健壯性產生影響。 – 2013-03-08 00:05:09