現在、大量のテキスト (数百 MB から数 GB のテキスト - DBpedia データセット) を使用するプロジェクトに取り組んでいます。スペースを節約するために、文字列を数値にマップし、印刷する必要がある場合にのみ文字列を操作します。データを処理するアルゴリズムを高速化するためにCache
、キーと値のキャッシュとして機能するクラスを設計しました。もちろん問題は、プログラムが長時間実行されると、キャッシュが非常に大きくなることです。
現時点で私が管理している方法は、キャッシュを特定のエントリ数に制限することです。このソリューションは機能していますが、それほど優れていません。より柔軟なアプローチは、すべてのキャッシュにある程度のメモリ制限を設け、制限に達したときにキャッシュを無効にするか、キャッシュの重要性とサイズに応じて一部のキャッシュを空にすることです。
各インスタンスが使用しているメモリ量を報告できるように、キャッシュのサイズをバイト単位で返す sizeB() メソッドを実装することを検討しています。しかし、もちろん、これはキャッシュをいつ停止するかという問題を解決しません...おそらく、すべてのメモリ使用量を手動で追跡する必要があります。おそらくCacheFactory
、すべてのキャッシュが登録され、制限に達すると空になるシングルトンもありますか?
そのようなことを行うための「標準的な」テクニックがあるかどうか疑問に思っていました。検索すべきイディオム/パターンはありますか?
また、自分でメモリ使用量を追跡する方がよいでしょうか (移植性は高くなりますが、より手間がかかるようです)、Linux で /prco/pid を読み取るなどの手法を使用することもできます。