Я пытаюсь сохранить полученные фреймы от камеры в хеш-таблицу для последующего использования в приложении Android.Удалить элемент таблицы hash не освобождает память
1. Receive Frame (data of type byte [])
2. I just have a counter variable increased each frame received.
3. Using counter variable i keep in the Hash Table along with 'data'.
4. If i reach the counter > 100, then i start deleting from the beginning.
Таким образом, это некий фиксированный размер хеш-таблицы.
Я пробовал с кодом ниже.
Callback -> Received 'data'
counter++;
myHashTable.put(counter, data.clone());
if (counter > 100) {
byte [] b = (byte[]) myHashTable.get(counter-100);
//use 'b' for some other purpose.
myHashTable.remove(counter-100);
}
Мои наблюдения
Я проверил использование памяти приложения, оно продолжает расти, и через какое-то время, получающего исключение ООМ. Что я делаю не так ? Я проверил в мониторинге использования памяти студии Studio.
Ниже ошибка:
01-04 22:54:55.232 7966-7999/sample.app.com E/art: Throwing OutOfMemoryError "Failed to allocate a 460812 byte allocation with 216448 free bytes and 211KB until OOM"
Что вы используете 'b', если вы говорите:« Используйте 'b' для каких-то других целей»? Если что-то держит эту ссылку на 'b', она не может быть собрана мусором. –
Обратите внимание, что 'byte [] b = (byte []) myHashTable.remove (counter-100);' будет проще, чем получать и удалять отдельно. –
Почему бы просто не сбросить счетчик, когда вы доберетесь до 100, чтобы перезаписать старый контент? – SkyDream