最近のコンピューターには、大型であるが低速なメインメモリシステムに加えて、キャッシュメモリのいくつかの層があります。メインメモリシステムから1バイトを読み書きするのに必要な時間で、最速のキャッシュメモリに数十回アクセスできます。したがって、1つの場所に1,000回アクセスする方が、1,000個(または100個)の独立した場所に1回アクセスするよりもはるかに高速です。ほとんどのアプリケーションは、スタックの最上部付近で少量のメモリの割り当てと割り当て解除を繰り返し行うため、スタックの最上部の場所は膨大な量(通常のアプリケーションでは99%以上)が使用され、再利用されますスタックアクセスのキャッシュメモリを使用して処理できます。
対照的に、アプリケーションが継続情報を格納するためにヒープオブジェクトを繰り返し作成および破棄する場合、これまでに作成されたすべてのスタックオブジェクトのすべてのバージョンをメインメモリに書き出す必要があります。CPUが開始したキャッシュページをリサイクルしたいと思った時点で、そのようなオブジェクトの大半が完全に役に立たなかったとしても、CPUはそれを知る方法がありません。その結果、CPUは無駄な情報の遅いメモリ書き込みを実行するために多くの時間を浪費しなければなりません。正確な速度のレシピではありません。
考慮すべきもう1つの点は、多くの場合、ルーチンに渡されたオブジェクト参照は、ルーチンが終了すると使用されないことを知っておくと役立つことです。パラメータとローカル変数がスタックを介して渡され、ルーチンのコードを調べて、渡された参照のコピーが保持されていないことが判明した場合、ルーチンを呼び出すコードは、オブジェクトは呼び出しの前に存在し、その後は何も存在しません。対照的に、パラメータがヒープオブジェクトを介して渡された場合、「ルーチンが戻った後」などの概念はやや曖昧になります。コードが継続のコピーを保持している場合、ルーチンは複数回続けて「戻る」ことができるためですシングルコール。