メモリフットプリントとは、プログラムが実行中に使用または参照するメインメモリの量を指します。 [ 1 ]
フットプリントという言葉は一般的に、オブジェクトが占める物理的な寸法の範囲を指し、その大きさを表します。コンピューティングでは、ソフトウェア アプリケーションのメモリ フットプリントは、プログラムの実行中に必要となる実行時メモリ量を示します。これには、(ほとんど) プログラム命令 (および時折定数) を含むコード セグメント、(初期化済みおよび未初期化)データ セグメント、[ 1 ]ヒープ メモリ、コール スタックなどのあらゆる種類のアクティブなメモリ領域、さらに、プログラムが実行中に必要とし、実行全体を通して少なくとも 1 回ロードされるシンボル テーブル、デバッグ データ構造、オープン ファイル、現在のプロセスにマッピングされた共有ライブラリなどの追加のデータ構造を保持するために必要なメモリが含まれます。[ 2 ]
大規模なプログラムほど、メモリ使用量も大きくなります。アプリケーションのメモリ使用量は、ロードする共有ライブラリやクラスの数とサイズにほぼ比例しますが、静的ライブラリ、実行可能プログラム、静的データ領域は一定の割合を占めます。プログラム自体がメモリ使用量の大部分を占めることは少なく、むしろ実行環境によって導入される構造がメモリの大部分を占めます。例えば、C++コンパイラは、プログラムの実行中にアクティブになるvtable、型情報オブジェクト、および多くの一時オブジェクトや匿名オブジェクトを挿入します。Javaプログラムの場合、メモリ使用量の大部分は、Javaアプリケーションの起動時に間接的にロードされるJava仮想マシン(JVM)自体という実行環境によって構成されます。さらに、ほとんどのオペレーティングシステムでは、アプリケーションによって開かれたディスクファイルもアプリケーションのアドレス空間に読み込まれるため、メモリ使用量に寄与します。
1990年代には、コンピュータのメモリ価格が下がり、メモリ使用量の多いプログラムが一般的になった。この傾向は主に、膨大なメモリを消費する大規模な企業向けアプリケーション(データベースなど)から、メモリを大量に消費するマルチメディアのオーサリングおよび編集ソフトウェアに至るまで、コンピュータソフトウェアの普及によるものだった。増え続けるメモリ需要に対応するため、利用可能なメモリを均等なサイズの区画に分割し、ハードディスクに保存された「ページ」から必要に応じて読み込む仮想メモリシステムが導入された。
従来、メモリが制約リソースとなることが多い組み込みシステム上でアプリケーションを実行するには、メモリ使用量の少ないプログラムが重要でした[ 1 ]。そのため、開発者は通常、利用可能なRAMに収まるようにプログラムのフットプリントを小さくするためだけに、効率(処理速度)を犠牲にしていました。たとえば、Sun Microsystemsは、このような制約のあるデバイス向けにJava仮想マシン(JVM)のバージョンをリリースしました。これはKVMと呼ばれています。KVMは、通常の家庭用PCや最新の携帯電話やタブレットで利用可能なメガバイト(またはギガバイト)のメモリではなく、キロバイトのメモリを持つプラットフォームで動作します。