SoftReference ベースのキャッシュを使用します (それ自体は非常に単純です)。しかし、テストを書いているときに問題に遭遇しました。
このテストの目的は、メモリのクリーンアップが発生した後、キャッシュが以前にキャッシュされたオブジェクトをサーバーから再度要求するかどうかを確認することです。
ここで、ソフト参照オブジェクトを解放するシステムを作成する方法の問題を見つけます。メモリが少なくなるまでソフト参照は解放されないため、System.gc()を呼び出すだけでは不十分です。この単体テストは PC で実行しているため、VM のメモリ バジェットはかなり大きくなる可能性があります。
================== 後ほど追記 ==============================
回答してくださった皆様、ありがとうございました!
すべての長所と短所を検討した後、 nandaとjarnbjoのアドバイスに従って、力ずくで行くことにしました。ただし、JVM はそれほど愚かではないように見えます。VM のメモリ バジェットを単独で超えるブロックを要求しても、ガベージ コレクションを試みません。そこで、次のようにコードを修正しました。
/* Force releasing SoftReferences */
try {
final List<long[]> memhog = new LinkedList<long[]>();
while(true) {
memhog.add(new long[102400]);
}
}
catch(final OutOfMemoryError e) {
/* At this point all SoftReferences have been released - GUARANTEED. */
}
/* continue the test here */