Java 转储是一些 Java 核心,当虚拟机因网络问题、内存错误或用户启动任何类型的击键组合而意外停止时,这些核心会被错误创建。通过调用合并到应用程序源代码中的 Java Dump API 或通过命令行直接提供 -Xdump:java 选项,可以轻松创建 Java Dump。 Java Dump 通过提供一些有用的信息来排除故障并诊断应用程序意外停止运行时发生的停止的根本原因,从而为最终用户提供帮助。
开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
语法
Java 转储没有特定的语法,因为 Java 转储的需要取决于问题的根本原因,如前所述,问题的根本原因可能会有所不同。因此,此语法流程是当用户需要诊断根本原因并希望使用 jcmd 工具进行分析时,只需向 JVM 发送所需的请求,并且必须在运行时使用与用于发送相同的系统这个请求发送给机器和Java程序。因此,语法定义如下:
jcmd <process_ id> GC.heap_dump <pathname_for_file>
传递的参数是:
Java 转储的工作流程非常有趣,因为它在机器崩溃或由于提到的各种原因(例如网络中断、此外,任何形式的阻碍Java程序执行的错误都可以通过使用java Dumps来保存,以便进行故障排除和诊断根本原因。 Java 中的转储工作基于以下一些场景:
使用 Java 转储工具和技术可以通过不同的方式捕获所有场景及其根本原因。它们对于解决内存泄漏相关问题和内存优化问题非常有用。它们大多以二进制格式存储在 hprof 文件中,可以使用以下工具和技术进行可视化和分析,例如:
此示例演示了线程对资源执行死锁,现在它们已经获取了资源的锁,可以使用命令行中提到的命令通过 Java Dumps 分析资源上的死锁。
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中文网其他相关文章!