のコードをSoftReference<T>
完全にテストするには、「はい、無効になっています」というケースをテストする方法を考え出す必要があります。「テスト用」コードパスを使用して参照を強制的にnullにすることで、これを多かれ少なかれモックすることができますが、GCが行うようにキューを正確に管理することはできません。GCが実際に収集と無効化を誘発する、再現可能で制御された環境を設定する経験を誰かが共有できるのだろうか?
2 に答える
3
問題を 2 つの部分に分けます。
- null が返された場合のコード パスのテスト。
- SoftReference のテスト。
#1 では、十分なバリエーション (場合によっては null、場合によっては実際のオブジェクト) で null を返すモックを使用して、GC で発生すると思われるすべての関連シナリオをテストします。それが単体テストになります。
次は実際には統合テストで、GC の動作 WRT SoftReference が期待どおりかどうかを確認します。おそらく負荷テストのより大きなコンテキストを除いて、そのようなテストを完全に自動化する努力をするかどうかはわかりませんが、それが重要な場合は、非常にタイトな最大メモリ量で JVM を起動し、負荷をかけますソフト参照コレクションをトリガーするのに十分なメモリ。失敗するパスは、コードでソフト参照を使用しないことです。メモリがロードされると、OutOfMemory エラーが発生するはずです。次に、ソフト参照に変換してテストをパスさせます。テストの目的は、動作に関する単体テストで行われた仮定を確認することです。
于 2010-05-11T20:16:47.680 に答える
3
この回答は、「フルメモリ」でガベージコレクションを強制する方法を説明しています。持っている以上に割り当てようとすると失敗しますが、すべてSoftReference
がクリーンアップされるまではそうではありません。
于 2011-11-09T08:59:40.657 に答える