ガベージコレクション
CやC++では通常、メモリの動的確保を行うには
newやmallocなどを使って確保し、いらなくなったらfreeなどを使って解放する必要があります
Javaでは標準でその辺を勝手にやってくれるので気にする必要がありませんこれをガベージコレクション(garbage collection:ごみ収集)というそうです
ここからが本題
メモリの合計容量はまだあるのにメモリ確保できなくなってしまう状況ががあるそうです
①メモリが全部使える状態
②データA[2]、データB[3]、データC[4]がメモリに使われる
③データBがいらなくなったのでを解放
④データD[4]を確保したいが、連続で4空いている領域が無いので、できない
といった感じで、メモリが虫食い状態になることで起きるエラーで
この虫食いを”詰める”処理もガベージコレクションがしてくれるらしい。
⑤ガベージコレクションでデータを詰める
デバッグログに
GC_CONCURRENT freed <1K, 30% free 7093K/10479K, external 408K/517K, paused 3ms+9ms
とかいう感じで出現するときのGCというのはこのガベージコレクションの略でエラーとかではなく
・ ヒープ領域を使いすぎている
・ガベージコレクションを行って,30%のメモリが開放された
・ガベージコレクションに,3ms+9msの時間がかかった
・ガベージコレクションを行って,30%のメモリが開放された
・ガベージコレクションに,3ms+9msの時間がかかった
ということらしい
ただし、Android実機のようにメモリの制約がある環境では、このガベージコレクションが短時間に大量に起こったりしたときメモリの再利用がうまく行えなくなり、エラーが起きてしまうそうです。
0 件のコメント:
コメントを投稿