我的代碼,這兩個虛擬件(讓我們來看看他們都寫在Java和C#中,所有變量本地):與垃圾收集語言一起使用時,哪種代碼的CPU /內存效率更高?
代碼1:
int a;
int b = 0;
for (int i = 1; i < 10 ; i++)
{
a = 10;
b += i;
// a lot of more code that doesn't involve assigning new values to "a"
}
代碼2:
int b = 0;
for (int i = 1; i < 10 ; i++)
{
int a = 10;
b += i;
// a lot of more code that doesn't involve assigning new values to "a"
}
乍一看,我會說這兩個代碼都消耗相同數量的內存,但代碼1的CPU效率更高,因爲它只創建和分配變量a
一次。 然後我讀了垃圾收集器是非常有效的,以至於代碼2會更有效地存儲內存(和CPU):在循環內部保留變量a
使它屬於Gen0,所以它將在變量b
之前被垃圾收集。
因此,與垃圾收集語言一起使用時,代碼2效率更高。我對嗎?
這裏沒有垃圾回收。 –
重複分配'a'有什麼意義?還要注意,這兩位有很大不同(第二位在循環外沒有'a'變量,第一位是)。 –
@ T.J.Crowder顯然它只是一個玩具的例子;一般的想法是將變量作用在循環中是否有意義,或者是否應該將它們拉出循環之外(即使不在循環外部使用)作爲優化。 – Servy