2017-01-05 4 views
1

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のスタジオのメモリ使用量の監視をチェックしました。

以下

は誤りです:

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" 
+0

「他の目的で「b」を使用する」と言うときに、「b」を使用しているのは何ですか?何かが 'b'の参照を保持している場合、ガベージコレクションはできません。 –

+1

'byte [] b =(byte [])myHashTable.remove(counter-100);は、別々に取得して削除するよりも簡単です。 –

+0

あなたは100になったらカウンタをリセットして古いコンテンツを上書きしてみませんか? – SkyDream

答えて

0

私はそれに簡単な解決策は、それが(場合> 100 は、内部追加達したときに、カウンターを0に設定されていないと思い){カウンタ= 0}私は推測する、それのthats無限ループなので、 は、printステートメントを追加してデバッグし、コンソールを参照してみます。

+0

okk @skydreamはすでにすばらしい仕事をしています – vic

関連する問題