ガベージコレクションのメモ

2013年7月19日金曜日

メモ

t f B! P L

ガベージコレクション

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の時間がかかった

ということらしい



ただし、Android実機のようにメモリの制約がある環境では、このガベージコレクションが短時間に大量に起こったりしたときメモリの再利用がうまく行えなくなり、エラーが起きてしまうそうです。

Translate

このブログを検索

  • ()
  • ()
もっと見る

QooQ