昨日発生していたサイトログインできない不具合は修正されております(詳細はこちら)

深夜のAndroidメモリ管理TL

7
ひょろも @hyoromo

もしかしてAndroid上で System.gc() しても、明示的にGC起こさせない設定になっててGC走ってくれないとか?

2010-11-26 01:25:57
ひょろも @hyoromo

気のせいだった、ちゃんとしてくれてる。

2010-11-26 01:26:30
mhidaka@技術書典 @mhidaka

あ、ついでなので混在しないように注釈しとくとBitmapImageのロード時はライブラリのSkia経由なのでVMHeapとは別にmallocしてます。オブジェクトはVMさん管理ですが、BitmapDataのメモリ確保はVMさん管理外です。

2010-11-26 01:27:22
ひょろも @hyoromo

@mhidaka せんせい、つまり BitmapFactory.decodeResource でデコードする時にOOMが発生してる場合、VM外のメモリが足らないって事になるんですか?

2010-11-26 01:29:43
mhidaka@技術書典 @mhidaka

@hyoromo VM外メモリ不足の可能性も高いと感じてます。decodeResource する際は瞬間的に読み込みたいBitmap以上のメモリを要求されてるんだと思います。

2010-11-26 01:32:42
mhidaka@技術書典 @mhidaka

今ぼくのなかで疑問なのはBitmapFactory.decodeResourceされた画像データのメモリ確保がNDK経由なのでVMさん管理外なのは間違いなさそう。ということはVMHeapは早々消費されないはずなんだけど・・・経験的にはVMHeap足りてないよなぁ、です。

2010-11-26 01:34:53
mhidaka@技術書典 @mhidaka

@keiji_ariyama あれ。1MBで開始してる風なコードですね。

2010-11-26 01:35:36
ひょろも @hyoromo

何パターンかの実験コードを書いたお陰で、今抱えてるバグが解消できそうな気がしてきた。ちょーねむいから、もうねよう。

2010-11-26 01:37:47
mhidaka@技術書典 @mhidaka

@keiji_ariyama VMのオプションで選べるみたいです。kMinHeapSizeはheapSizeMaxの下限マクロ、kMinHeapStartSizeは起動時のheapSizeStartの下限値マクロらしい。

2010-11-26 01:43:08
ARIYAMA Keiji @keiji_ariyama

@mhidaka なんか、普通にコマンドラインでusageとか出るんですね。意外ー

2010-11-26 01:44:42
mhidaka@技術書典 @mhidaka

デバッギングツールのDDMSなんかで見えるメモリ使用量はプロセスHeap単位だからVMHeapが消費されているのかどうかなんかわからない? いや、でも詳しくメモリ確保の様子が分かるので、キチンと追えば解が見つかりそうな気がする

2010-11-26 01:45:30
mhidaka@技術書典 @mhidaka

@keiji_ariyama dvmは、おもしろいつくりしてますねー。勉強になります。

2010-11-26 01:46:18
mhidaka@技術書典 @mhidaka

なんか本来の調査方向と異なった調査になったがよくあること。(とても充実している)

2010-11-26 01:47:58
mhidaka@技術書典 @mhidaka

そろそろEmbedded C++はC++で置き換わらないものか。

2010-11-26 02:15:09
Makoto Nishikawa @mnishikawa

@mhidaka まだまだメモリの使い方決める要素と、Linuxから見る方法があります。いくつかヒントを教えれるので、気分転換に僕の席までどうぞー

2010-11-26 06:07:54
Makoto Nishikawa @mnishikawa

@mhidaka DDMSで出てくるのはPSS(proportional set size,sharedを共有してるプロセスの平均メモリ+private)だから、sharedをzygoteが抱えるAndroidでは参考程度に思っといた方がいいです。

2010-11-26 06:15:01
Makoto Nishikawa @mnishikawa

@mhidaka /proc/${pid}/smaps 見たらわかる。

2010-11-26 06:18:44