我的代码,这两个虚拟件(让我们来看看他们都写在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