Skip to content

メモリ使用量について

Duktapeはオンデマンドでメモリーを割り当て、事前に割り当てたヒープを必要としません。32ビット・システムでヒープを作成する場合、Duktapeは組み込みのECMAScriptオブジェクトのために約80kBを必要とします。特定の低メモリ・オプションを使用した場合、初期メモリ使用量は約27kBになります。組み込みオブジェクトと文字列をROM(読み取り専用データ・セクション)に移動させると、これはさらに約3kBまで減らすことができます。また、カスタムネイティブバインディングを完全にROMに移動させることも可能です。

ヒープ作成後、アプリケーションスクリプトの実行に必要なメモリが追加で割り当てられます。参照カウントにより、未使用の割り当てメモリはほとんどありません。唯一の大きな例外は、参照ループに参加するオブジェクトで、これらはマークアンドスイープにより最終的に収集されます。

Duktapeが必要とするメモリ割り当ては、基本的に2つのカテゴリーに分類されます。まず、文字列、バッファ、オブジェクト、オブジェクトのプロパティ・テーブルなどに必要な、およそ16バイトから128バイトの小さな割り当てがたくさんあります。次に、ECMAScript関数のバイトコード、大きな文字列とバッファ、バリュースタック、グローバル文字列テーブル、Duktapeヒープ・オブジェクトなどに必要な大きな割り当ては、はるかに少なくなっています。

ほとんどのシステムでは、メモリ使用量やメモリ割り当てパターンが問題になることはありません。低メモリ環境、例えばシステム RAM が 1MB 未満の場合、メモリ使用を最適化するためにカスタムのアロケーターを使いたいかもしれません。プールベースのアロケータは、フラグメンテーションの問題なしに、小さなアロケーションチャーンにうまく対処します。欠点は、具体的なアロケーションパターンに合わせてメモリプールサイズを調整する必要があることです。もし、プラットフォームのアロケーションプリミティブがたくさんの小さなアロケーションでうまく機能しない場合は、プールアロケータまたはハイブリッドアロケーションを使用するとよいでしょう。

どのような低メモリ機能が存在し、どのように低メモリシステム用のメモリプールをチューニングするかについて、詳しくは低メモリオプションと低メモリ.rstを参照してください。

デフォルトのオプションでは、Duktape は 32 ビットの refcount フィールドを使用し、64 ビットのシステムで非常に大きなメモリ・サイズになると技術的にラップする可能性があります。実際には、このようなことは起こりにくく、Duktapeのヒープが64GBより大きいことが必要です。DUK_USE_REFCOUNT32 を無効にして、 refcount フィールドに size_t を使用します。