Как освободить память при выполнении сетевого запроса в al oop? - PullRequest
0 голосов
/ 14 января 2020

Обновление:

g c будет работать только после финала}, что означает, что только после полного выполнения l oop сборка мусора g c будет запущена один раз. Итак, есть ли какой-нибудь программный паттерн, который можно использовать здесь? вроде как для l oop, но в то же время также позволяют g c запускать каждую итерацию. Я не знаю, дал ли я ясно понять ... Я могу жить с падением производительности, вызванным g c, выполняющим каждую итерацию.

Я использовал залп в проекте android, и я Я не могу получить рабочее решение.

В основном у меня есть огромная коллекция материалов, которые я буду отправлять (через http с помощью volley lib) непрерывно. когда я отправляю 10 из них, это не проблема, но если я делаю это непрерывно, это в конечном итоге израсходует всю память, и приложение будет остановлено из-за занимаемого им места.

ниже приведен блок демонстрационного кода

requestqueue = Common.getQueue();//it will get a normal requestqueue
for (int i = 0; i < waitinglist.size(); i++) {

    synccopyreq.filedatas.add(Common.getDataFromWaitinglist(i));
    Common.httpPostWithQueue( requestqueue,"tagfullcopy", httpEndPoint+"/sync/fullcopy", gson.toJson(synccopyreq), that, new Common.CallbackInterface() {
        @Override
        public void completed(String result)
        {
            Log.i("shawhu","ok done");
        }
    });
//this was added but it doesn't work unfortunately
//using System.gc() like so was not recommended and most of the time wont'be effective either, I knew that.
System.gc();


}

Пожалуйста, прочитайте это, я попробовал профилировщик, когда все завершится (например, при работе с 10 элементами), использование памяти будет go нормально снижаться, но если я продолжу его непрерывно, оно не будет. использование памяти просто go постоянно увеличивается, и это в конечном итоге приведет к поломке приложения (прекращается системой android). Как освободить память на каждой итерации в l oop?

Пожалуйста, помогите мне, спасибо !!

1 Ответ

1 голос
/ 14 января 2020

Не существует определенного способа освобождения памяти вручную на языках, имеющих собственный G C.

Однако вы можете запросить GC вызов в Java, используя System.gc().

См. Это: https://www.geeksforgeeks.org/garbage-collection-java/

Примечание. Хотя этот метод можно вызывать из любого места в любое время, он по-прежнему не гарантирует, что сборка мусора будет выполняться самостоятельно.

Я бы серьезно не рекомендовал использовать GC подобным образом, поскольку каждый вызов G C может влиять на производительность в главном потоке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...