Java ダンプは、ネットワークの問題、メモリ エラー、またはユーザーが何らかの種類のキーストロークの組み合わせを開始したときに、仮想マシンが予期せず停止したときに誤って作成される Java コアの一部です。 Java ダンプは、アプリケーションのソース コードに組み込まれている Java Dump API を呼び出すか、コマンド ラインから -Xdump:java オプションを直接指定することによって簡単に作成できます。 Java Dump は、アプリケーションの実行が予期せず停止したときに発生する停止の根本原因のトラブルシューティングと診断に役立つ情報を提供することで、エンドユーザーを支援します。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
構文
Java ダンプの必要性は問題の根本原因によって異なり、前述したようにさまざまなため、Java ダンプに特定の構文はありません。したがって、この構文フローは、ユーザーが根本原因を診断する必要があり、必要なリクエストを JVM に送信するだけで jcmd ツールを使用して分析を実行したい場合であり、送信に使用されるのと同じシステムを実行時に使用することが必須です。このリクエストはマシンと Java プログラムに送信されます。したがって、構文は次のように定義されます:
jcmd <process_ id> GC.heap_dump <pathname_for_file>
渡されるパラメータは次のとおりです :
Java ダンプのワークフローは、マシンのクラッシュ時やネットワーク停止などのさまざまな理由によるシステムの予期せぬ停止時に、エンドユーザーやプログラマーに大きな助けとなるという点で非常に興味深いものです。さらに、Java プログラムの実行を妨げるあらゆる形式のエラーは、Java ダンプを使用してトラブルシューティングと根本原因の診断に保存できます。 Java のダンプが機能することに基づいて、次のようなシナリオがいくつかあります。
Java ダンプ ツールとテクノロジを使用して、すべてのシナリオとその根本原因を把握するさまざまな方法があります。これらは、メモリ リーク関連の問題やメモリ最適化問題のトラブルシューティングに非常に役立ちます。これらはほとんどの場合、バイナリ形式で hprof ファイルに保存されており、次のようなツールやテクノロジーを使用して視覚化および分析できます。
この例は、リソース上でデッドロックを実行するスレッドを示しています。リソース上でロックを取得したので、コマンド ラインで説明されているコマンドを使用して、Java ダンプでリソース上のこのデッドロックを分析できる可能性があります。
public class Java_lock_Dump_Demo { public static void main(String[] args) throws InterruptedException { Object ob_a = new Object(); Object ob_b = new Object(); Object ob_c = new Object(); Thread Java_lock_Dump_DemoThread1 = new Thread (new Java_lock_Dump_Demo_Sync_Thread(ob_a, ob_b ), "Java_lock_Dump_DemoThread1"); Thread Java_lock_Dump_DemoThread2 = new Thread (new Java_lock_Dump_Demo_Sync_Thread(ob_b, ob_c ), "Java_lock_Dump_DemoThread2"); Thread Java_lock_Dump_DemoThread3 = new Thread (new Java_lock_Dump_Demo_Sync_Thread(ob_c, ob_a ), "Java_lock_Dump_DemoThread3"); Java_lock_Dump_DemoThread1.start(); Thread.sleep(3000); Java_lock_Dump_DemoThread2.start(); Thread.sleep(3000); Java_lock_Dump_DemoThread3.start(); } } class Java_lock_Dump_Demo_Sync_Thread implements Runnable { private Object ob_a; private Object ob_b; public Java_lock_Dump_Demo_Sync_Thread(Object ob_a, Object ob_b) { this.ob_a = ob_a; this.ob_b = ob_b; } @Override public void run() { String nm = Thread.currentThread().getName(); synchronized (ob_a) { System.out.println(nm + " acquire_the_lock_on_first_resource " + ob_a); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (ob_b) { System.out.println(nm + " acquire_the_lock_on_second_resource " + ob_b); } System.out.println(nm + " Release_the_lock_for_second_object " + ob_b); } System.out.println(nm + " Release_the_lock_for_first_object " + ob_a); System.out.println(nm + " Completed with the deadlock_test for acquiring the resource."); } }
出力:
上記でコンパイルされたコードのダンプを取得する方法は、次のコマンドを使用して実行できます:
Jcmd<Process_id> GC.heap_dump <file-path> jcmd 20528 GC.heap_dump C:\Users\adutta\eclipse-workspace\Matcher_Example\src
Java Dumps is considered a very interesting feature in java as It provides programmers and users with the ability to get out of the unwanted and unexpected situations at the time of halt in the running program as well as when the machine goes out of memory space. It also provides the user with detailed and proper content for the root cause or the troubleshooting issue.
以上がJavaダンプの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。