Предположим, у нас есть два списка ArrayList, первый один содержит множество объектов T, второй содержит объект W, созданный из объектов T первого списка.
И мы циклически просматриваем его таким образом (после цикла список :
Код: Выделить всё
public void funct(ArrayList list)
{
ArrayList list2 = new ArrayList();
for (int i = 0 ; i < list.size() ; i++)
{
W temp = new W();
temp.set(list.get(i));
temp.saveToDB();
list2.add(temp);
}
// more code! from this point on the `list` is useless
}
Я не очень хорошо знаю, как работает сборщик мусора в Java, но наверняка в предыдущем примере есть много возможностей для оптимизации.
Поскольку список больше не используется после for Цикл, который я считал первой оптимизацией, заключается в переходе от цикла for к циклу do и очистке списка по мере его прохождения:
Код: Выделить всё
public void funct(ArrayList list)
{
ArrayList list2 = new ArrayList();
while (list.size() > 0)
{
W temp = new W();
temp.set(list.remove(0));
temp.saveToDB();
list2.add(temp);
}
// more code! from this point on the `list` is useless
}
Как мне лучше оптимизировать приведенный выше код? и как я могу предотвратить ошибку нехватки места в куче памяти? (увеличение значений XMX и XMS невозможно).
Подробнее здесь: https://stackoverflow.com/questions/212 ... -of-memory