這個問題又可以分為:
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