6

データを失いたくないと同時に、外部依存関係 (DB など) が原因でこのサービスが失敗する必要があるため、メモリ内で行われたすべての呼び出しをステージングするサービスがあります。これらのステージングされた呼び出しは、定期的にピックアップされ、バックグラウンドで処理されます。

何らかの理由で呼び出しが多すぎてメモリが不足した場合は、警告する必要があります。

簡単に言えば、質問は次のとおりです。リソース不足のためにリストへの追加が失敗したときに通知するために、キャッチまたは監視する必要がある例外は何ですか? VM 自体で OOM が発生するのでしょうか、それともコレクション レベルの制限もありますか?

コレクション レベルの制限がない場合、サービスの使用状況をどのように監視することをお勧めしますか? 現在、ヒープ使用量とメモリ使用量のメトリックがあります。それらで十分ですか?また、JVM は OOM エラーで強制終了するように構成されています (これは、VM マネージャーが強制終了時に管理しているすべてのプロセスを再起動するためです)。

4

3 に答える 3

4

スローされる例外はOutOfMemoryException. この例外は、コレクションが使用可能なヒープ スペースをすべて消費すると、アプリケーションのどの部分でもスローされる可能性があります。

ただし、特定のコレクションに対してスローされる可能性があることがわかっている場合は、これが発生するのを防ぐのが最善の方法です。つまり、このコレクションに上限を設けるか、キャッシュを使用して、未使用のエンティティが必要に応じて削除され、再ロードされるようにします。軽量なキャッシュの実装には、Guava のCacheBuilderをお勧めします。

アップデート

誰もが FS ベースのストレージを提案しているので、軽量なドロップインの提案を以下に示します。

于 2013-10-23T18:32:49.493 に答える
2

Collection.add の仕様で見つけたものは次のとおりです。

コレクションが特定の要素を既に含んでいるという理由以外の理由でその要素の追加を拒否した場合、(false を返すのではなく) 例外をスローする必要があります。これにより、この呼び出しが返された後、コレクションには常に指定された要素が含まれるという不変条件が保持されます。

どの例外が指定されていないため、異なるコレクションが異なる例外をスローする可能性があります。

于 2013-10-23T18:31:35.687 に答える