興味のある内容なので、Androidのソースを見てみました。メールを書こうと
思って、最後をみたら3.0だったのですね。ソース無いか・・・。
とりあえず、v2.2.2_r1のソースを追ってみました。Dalvik自体のHeapの最大
値を増やすのは、起動オプション -Xmx, -Xmsオプションで指定すれば、増やせ
そうです。
dalvikvm/vm/int.c
static int dvmProcessOptions(int argc, const char* const argv[], bool
ignoreUnrecognized)
ここで、gDvm.heapSizeStartとgDvm.heapSizeMaxがセットされていますね。デ
フォルトだと、dalvikvm/vm/int.cの
static void setCommandLineDefaults()に、
/* Defaults overridden by -Xms and -Xmx.
* TODO: base these on a system or application-specific default
*/
gDvm.heapSizeStart = 2 * 1024 * 1024; // Spec says 16MB; too big for us.
gDvm.heapSizeMax = 16 * 1024 * 1024; // Spec says 75% physical mem
と書かれていますね。 ↑#defineしてないんかい!
で、アプリを起動するときのheap確保は、
dalvik/vm/alloc/HeapSource.c
static bool addNewHeap(HeapSource *hs, mspace msp, size_t
mspAbsoluteMaxSize)
でやっていると思うのですが、アプリをforkするときはmsp==NULLで着ていると
思うのです。
そうすると、
heap.absoluteMaxSize = hs->absoluteMaxSize - overhead;
heap.msp = createMspace(HEAP_MIN_FREE, heap.absoluteMaxSize, hs->numHeaps);
となっているので、heapのメモリスペースがHEAP_MIN_FREE固定で確保されま
す。overheadというのは、たぶん、既に別アプリが確保したメモリです。
で、ここまで書いて、私の解釈ですが、アプリはdalvikvmが確保した1つのメ
モリを使いあっているのではないかと思います。ただし、親プロセスである
ZygoteのヒープはCGしないフラグ?数値?がビットマップにあるので、ここはア
プリは使わない。
なので、アプリごとに使うピープを指定することはできないような気がします。
すいません、より、詳しい方のフォローをお願いします。
--
山本三七男 (Minao Yamamoto) ---------------- ハンドル:たろサ -----
E-Mail: taro...@gmail.com