spymemcached ライブラリ (http://code.google.com/p/spymemcached) を使用してオブジェクトを memcached に読み書きする Java アプリがあります。
アプリは常に同じタイプのオブジェクトを memcached にキャッシュします。キャッシュされたオブジェクトは、常に 5 つまたは 6 つの java.util.String の ArrayList です。SizeOf ライブラリ (http://www.codeinstructions.com/2008/12/sizeof-for-java.html) を使用して、ArrayList の平均ディープ サイズが約 800 バイトであることを確認しました。
全体として、12 GB の RAM を memcached に割り当てました。私の質問は、memcached が保持できるこれらのオブジェクトの数は?
SizeOf の「800 バイト」メトリックを使用することが正しいのか、それとも誤解を招くものなのか、はっきりしません。たとえば、SizeOf は各文字を 2 バイトとしてカウントします。String 内のすべての文字が通常の ASCII 文字であることはわかっています。spymemcached は Java シリアライゼーションを使用していると思いますが、それによって各 char が 1 バイトまたは 2 バイトを占めるようになるかどうかはわかりません。
また、memcached が使用するオブジェクトごとのオーバーヘッドがどの程度かはわかりません。したがって、計算では、memcached が独自の内部データ構造に使用する RAM を考慮する必要があります。
100% 正確な数値は必要ありません。大まかな封筒の裏側の計算は素晴らしいでしょう。