ホームページ  >  記事  >  Java  >  Javaメモリオーバーフローのインタビューの質問

Javaメモリオーバーフローのインタビューの質問

(*-*)浩
(*-*)浩オリジナル
2019-11-14 14:56:272966ブラウズ

Javaメモリオーバーフローのインタビューの質問

メモリ オーバーフローの原因は数多くありますが、一般的な理由は次のとおりです。

メモリにロードされるデータの量大きすぎる 巨大です (一度にデータベースから取得するデータが多すぎるなど);

コレクション クラス内にオブジェクトへの参照があり、使用後にクリアされないため、JVM をリサイクルできなくなります;

コード内に無限ループまたはループが存在します。生成される重複オブジェクト エンティティが多すぎます。

使用されているサードパーティ ソフトウェアのバグ。

起動パラメータのメモリ値の設定が小さすぎます。 ;

メモリ オーバーフローの解決策:

最初のステップは、JVM 起動パラメータを変更し、メモリを直接増やすことです。 (-Xms パラメーターと -Xmx パラメーターを忘れずに追加してください。)

2 番目のステップは、エラー ログをチェックして、「OutOfMemory」エラーの前に他の例外やエラーがあるかどうかを確認することです。

3 番目のステップは、コードを詳しく調べて分析し、メモリ オーバーフローが発生する可能性のある場所を特定することです。

次の点に注目してください。

データベース クエリにすべてのデータを一度に取得するクエリがあるかどうかを確認します。一般に、10 万件のレコードが一度にメモリにフェッチされると、メモリ オーバーフローが発生する可能性があります。この問題は比較的隠されています。オンラインになる前は、データベース内のデータが少なく、問題が発生する可能性は低かったのですが、オンラインになった後は、データベース内のデータが増え、1 つのクエリでメモリ オーバーフローが発生する可能性があります。

したがって、データベース クエリにはページングを使用するようにしてください。コードに無限ループや再帰呼び出しがないか確認してください。新しいオブジェクト エンティティを繰り返し生成する大規模なループが存在するかどうかを確認します。

データベースクエリに全データを取得するクエリがあるか確認してください。一般に、10 万件のレコードが一度にメモリにフェッチされると、メモリ オーバーフローが発生する可能性があります。

この問題は比較的隠れています。オンラインになる前は、データベース内のデータが少なく、問題が発生する可能性は低かったです。オンラインになった後は、データベース内のデータが増え、単一のクエリによって問題が発生する可能性があります。メモリオーバーフロー。

したがって、データベース クエリにはページングを使用するようにしてください。

List や MAP などのコレクション オブジェクトが使用後に消去されていないか確認してください。 List や MAP などのコレクション オブジェクトには常にオブジェクトへの参照があるため、これらのオブジェクトは GC によってリサイクルできません。

4 番目のステップは、メモリ表示ツールを使用してメモリ使用量を動的に表示することです。

以上がJavaメモリオーバーフローのインタビューの質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。