2009/05/25

Declaring variables inside or outside a loop.

這個問題又可以分為:
1. variable是primitive type
2. variable是object type.

而object type 又可以分為:
1. 每次在迴圈中new新Object
2. 在迴圈中reuse同一份在loop 外的object

主要考慮的是程式的performance,

若performance沒有太大差異則考慮readibility 與maintainability。

下面的討論串,似乎沒有一個定論,
Declare Variables Inside or Outside a Loop
Myth - Defining loop variables inside the loop is bad for performance
Declaring variables inside or outside a loop?
Declare variable inside or outside the loop?


但是提到了許多層面,相當有趣,
如Scoping、Garbage Collection, Stack Frame、Compiler Optimization、Java Bytecode、Benchmark..

不過JVM似乎的確有對這個問題做optimization,
因為宣告在loop外與loop內的bytecodes長的都差不多。
換句話說,loop裡的的變數並不會真的被宣告n次,

因為local varialbe 在stack frame中只會被push一次,
並且直到loop block結束後才會被pop,
而不是每次iteration都會做一次push & pop variable的動作。

另外,很多支持variable應該放在loop內的主要理由是:
變數的scoping應該愈短愈好,在loop block內用完就該讓GC回收走,
而不該留在loop block外,因為佔記憶體不說,還可能造成非預期的錯誤。
並且以readibility的角度來看,variable的宣告和使用應該是愈近愈好。

No comments:

Post a Comment