JavaでVirtualMachineErrorを修正する方法。ラングVirtualMachineErrorは、Java仮想マシンが機能しない内部エラーまたはリソース制限に遭遇したときにスローされます。 これは、アプリケーション全体がクラッシュするのを防ぐためにJVMが採用する自己防御的なメカニズムです。 この記事では、VirtualMachineErrorのさまざまな種類、その特性、それらがトリガーされるさまざまな理由、およびそれらを修正するためのいくつかの潜在的な解決策につ
VirtualMachineErrorの種類
VirtualMachineErrorには四つの異なるタイプがあります:
- OutOfMemoryError
- StackOverflowError
- InternalError
- UnknownError
このセクションでは、これらの型を詳細に確認しましょう。
次世代DEVOPS:バリューストリーム管理
Helen Beal(DevOps Institute.)
あなたのサーバーレスチームを成長させる方法
Sheen Brisals(レゴグループ)
MLOPS:機械学習システムの継続的な提供
Hauke Brammer(finpair GmbH)
Fig: Omg(Oh My God)の頭字語と同じように、Oom(OutOfMemoryError)はDevOpsコミュニティの間で非常に人気があります。 ほとんどのDevOpsエンジニアは、OutOfMemoryErrorが1つしかないと考えるかもしれませんが、実際にはOutOfMemoryErrorには8つの異なるフレーバーがあります:
- ジャワ。ラングOutOfMemoryError:Javaヒープスペース
- java。ラングOutOfMemoryError:GCオーバーヘッド制限が
- javaを超えました。ラングOutOfMemoryError:要求された配列サイズがVM制限
- javaを超えています。ラングOutOfMemoryError:Permgenスペース
- java.ラングOutOfMemoryError:Metaspace
- java.ラングOutOfMemoryError:新しいネイティブスレッド
- javaを作成できません。ラングOutOfMemoryError:プロセスを強制終了または子を犠牲にする
- java。ラングOutOfMemoryError:理由stack_trace_with_native_method
各エラーは異なる理由によってトリガされます。 同様に、これらのエラーの解決策は、OutOfMemoryErrorの問題の種類によって異なります。 ここでは、すべての異なる種類のOutOfMemoryError、その原因、および解決策を要約した美しい1ページの文書があります。
一般に、OutOfMemoryErrorはガベージコレクションログとヒープダンプを分析することによって診断および修正できます。 ガベージ-コレクション-ログを手動で分析するのは面倒な場合があるため、GCeasy、HP Jmeter、IBM GC analyzerなどの無料のツールを使用することを検討してください。 同様に、HeapHeroやEclipse MATのような無料のツールを使用してヒープ-ダンプを分析することを検討することができます。
も参照してください:StackOverFlowError: 原因&ソリューション
StackOverflowError
スレッドのスタックスタックには、実行されるメソッド、プリミティブデータ型の値、ローカル変数、オブジェクトポインタ、戻り値 これらのものはすべてメモリを消費します。 スレッドのスタックサイズが割り当てられたメモリ制限を超えて成長すると、java。ラングStackOverflowErrorがスローされます。 この問題は、通常、実行中のプログラムのバグのためにスレッドが再帰的に同じ関数を何度も何度も呼び出すときに発生します。 StackOverflowErrorをデバッグする方法と、itcを修正するためのすべての可能な解決策の詳細はここにあります。
InternalError
java.ラングInternalErrorは3つの理由でJVMによってスローされます。 仮想マシンを実装するソフトウェアに障害がある場合、基になるホストシステムソフトウェアに障害がある場合、またはハードウェアに障害がある場
しかし、この種のInternalErrorに遭遇することはまれです。 InternalErrorの原因となる特定のシナリオを理解するには、OracleのJavaバグデータベースで’InternalError’文字列を検索します。 この記事の執筆時点(2018年12月20日)では、OracleのJava Bug databaseでこのエラーについて報告されている欠陥はわずか200件です。 それらのほとんどは固定されています。 だから、これについてあまり心配しないでください!
UnknownError
java.ラングUnknownErrorは、例外またはエラーが発生したが、Java仮想マシンが実際の例外またはエラーを報告できない場合にスローされます。 UnknownErrorはほとんど発生しません。 実際、Oracle Java Bug databaseで’UnknownError’を検索すると、報告された欠陥は2つしかありませんでした。
も参照してください: Javaアプリケーションのリモートデバッグ
特性
VirtualMachineErrorには、いくつかの主な特性があります:
- チェックされていない例外
- 同期&非同期配信
このセクションでは、これら二つの特性について説明しましょう。
チェックされていない例外
チェックされていない例外とチェックされていない例外の2つのタイプがあります。
コンパイル時にチェックされる例外は、チェック例外と呼ばれます。 コード内のいくつかのメソッドがチェック例外をスローする場合、メソッドは例外を処理するか、’throws’キーワードを使用して例外を指定する必要があります。 チェックされる例外の例としては、IOException、SQLException、DataAccessException、ClassNotFoundExceptionなどがあります。
未チェックの例外にはこの要件はありません。 それらはつかまえられるか、または投げられる宣言される必要がない。 VirtualMachineErrorのすべてのタイプは、チェックされていない例外です。
Synchronous&asynchronous delivery
例外は、同期と非同期の2つのモードでスローできます。
同期例外は、同じような環境でプログラムが何回実行されたかに関係なく、特定のプログラム文で発生します。 同期例外の例としては、NullPointerException、A R R A Y Indexoutofboundexceptionなどがあります。
非同期例外は、任意の時点およびプログラム文の任意の部分で発生する可能性があります。 それが投げられる一貫性はありません。 すべてのVirtualMachineErrorsは非同期的にスローされますが、同期的にスローされることもあります。 StackOverflowErrorは、メソッドの呼び出しによって同期的にスローされるだけでなく、ネイティブメソッドの実行またはJava仮想マシンのリソースの制限のために非同期 同様に、OutOfMemoryErrorは、オブジェクトの作成、配列の作成、クラスの初期化、およびボックス化変換の間に同期的にスローされるだけでなく、非同期的にスローされるこ