2013-04-13 2 views
1

Я вычислил для android. Я стараюсь быть осторожным в отношении утечек памяти, потому что моя программа имеет дело с большим количеством данных, и сборщик мусора, кажется, очень занят.Хорошая практика, чтобы избежать утечки памяти

мне было интересно, есть ли разница Разногласия между:

for (int i=0;i<200;i++) 
    { 
    MyObject myobject = new MyObject(i,i+1); 
    myobject.writeToDatabase(); 
    } 

и

MyObject myobject=null; 
for (int i=0;i<200;i++) 
    { 
    myobject = new MyObject(i,i+1); 
    myobject.writeToDatabase(); 
    } 

и (избегая использовать конструктор)

MyObject myobject=new MyObject(0,1); 
myobject.writeToDatabase(); 
for (int i=1;i<200;i++) 
    { 
    myobject.setFirstValue(i); 
    myobject.setSecondValue(i+1); 
    myobject.writeToDatabase(); 
    } 

спасибо !!

+1

Если в самой операционной системе не обнаружена ошибка, ни одно из перечисленных выше не вызывает утечки памяти. Утечка памяти - это когда указатель на блок выделенной памяти отбрасывается до освобождения памяти. Это возможно на C или C++, но не на таких языках, как Java и C#, которые делают сборку мусора для вас. В любом случае, как говорит @ Arno-Sluismans, третий вариант является наиболее эффективным. – Stochastically

+0

@ Напрасно, спасибо за этот вклад, я добавил это к моему ответу. –

ответ

3

Третий вариант, безусловно, лучший. В этом контексте два других варианта практически идентичны в Java.

Если вы не создаете новый объект каждый раз, а вместо этого используете старый, вы освобождаете сборщика мусора от большой работы. Это хороший способ повысить эффективность работы и управления памятью.

В двух первых вариантах вы в основном делаете то же самое: создаете новый объект в начале цикла и позволяете ему уничтожаться в конце цикла. Тот факт, что вы используете одну и ту же переменную для указателя, не имеет большого значения.

Edit:

По словам Stochastically, ваш код не вызовет каких-либо утечек памяти, хотя, просто за то, что сборщик мусора будет убедиться в том, что не происходит. Я предполагаю, что есть некоторые трюки, чтобы вызвать утечку памяти в конце концов, но в нормальных ситуациях, которые просто не произойдут. Но, как я объяснил, у вас все еще есть способы сделать вашу сборку мусора более эффективной, используя меньшее количество объектов.

+0

Хорошо, спасибо за четкий ответ. Поскольку я делаю такие петли для тысяч объектов, которые могут быть довольно тяжелыми, я, вероятно, «разгружу» много сборщика мусора, переключившись на третий вариант. – user2250466

Смежные вопросы