删除哈希表元素不释放内存

时间:2017-01-05 13:51:38

标签: java android hashtable

我正在尝试将从Camera收到的帧保存到哈希表中,以便以后在Android应用程序中使用。

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);

    }

我的观察

我检查了应用程序的内存使用情况,它继续增长,并在一段时间后收到OOM异常。我究竟做错了什么 ?我检查了Android 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"

1 个答案:

答案 0 :(得分:0)

我认为简单的解决方案就是当它达到>时你没有将计数器设置为0。 100 添加内部if(){counter = 0}这就是我猜它因为它是一个无限循环 尝试通过添加print语句并查找控制台来调试它。