如何初始化对象,以使垃圾收集器必须做更少的工作



这两种形式的代码在Android和Java中有什么区别。

for(int i = 0; i < 10000; i++){
    Student s = myMap.get(key);
    // do stuff
}

和:

Student s;
for(int i = 0; i < 10000; i++){
    s = myMap.get(key);
    // do stuff
}

第一个创建10000个对象,等待垃圾收集器将其从内存中删除,而第二种形式的代码仅创建了一个对象。我对吗?还是我错了?

如果这是真的,那么内存是否更好,然后使用第二种形式?

你错了,没有理由使用第二种表格。

创建了0个对象,唯一的区别是变量的范围。这些对象已经创建,它们在地图中。您只是分配了对现有对象的引用。

最好在最小的范围中声明变量,因此,如果您不在循环外使用s(这是没有意义的,除非您想要最后一个学生进行处理),那么声明它是有意义的在循环内。

如果将参考类型对象分配给变量,则您不是在复制对象内容,而只是添加对其的参考。分配不会创建新对象。功能myMap.get做。在这两种情况下,都会创建10000个对象和一个参考集。因此,基本上两个代码段都大致相同,首先是从最佳实践角度来看的,因为它使范围保持尽可能小的范围比第二个范围更可读。

最新更新