首页 > Java > java教程 > Java 转储

Java 转储

PHPz
发布: 2024-08-30 15:09:57
原创
1074 人浏览过

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 程序正在执行的进程的 id。

如上所述文件将传递到的路径名称。

转储在 Java 中如何工作?

Java 转储的工作流程非常有趣,因为它在机器崩溃或由于提到的各种原因(例如网络中断、此外,任何形式的阻碍Java程序执行的错误都可以通过使用java Dumps来保存,以便进行故障排除和诊断根本原因。 Java 中的转储工作基于以下一些场景:

  • Java 应用程序可能由于一般保护故障而崩溃并自动生成 java 转储文件的场景。为了克服和理解根本原因,非常需要了解线程类型或正确知道当前正在执行的线程,以便轻松识别问题。
  • 另一种情况可能是由于 Java 堆内存不足,这也会自动生成 Java 转储。
  • 场景可能是由于死锁情况,所有线程的目标是同时获取同一线程作为资源。
  • 用户可能运行了按键组合,也可能会出现突然挂起的情况。
  • 有多种方法可以处理上述场景,这意味着找到根本原因并捕获异常,其中包括许多 Java Dumps 工具,它们为最终用户提供了轻松和灵活的能力在立即崩溃或任何其他不太受欢迎的情况(例如停止或 OutOfMemory 事件)时进行调试和故障排除。

使用 Java 转储工具和技术可以通过不同的方式捕获所有场景及其根本原因。它们对于解决内存泄漏相关问题和内存优化问题非常有用。它们大多以二进制格式存储在 hprof 文件中,可以使用以下工具和技术进行可视化和分析,例如:

  • 通过向工具提供正确的进程 ID 和文件路径合并来使用 jmap 等 JDK 工具。
  • 当 JVM 中的同一台机器用于头转储读取根本原因和确认时,使用负责发出请求和响应的 jcmd 为 JVM 提供服务。
  • JVisualVM 也是 JDK 的一部分的工具,用于增强并为轻松检查 java 转储提供帮助。
  • 还可以通过编程方式自动捕获 Dump,然后获取相应的输出。

Java 转储示例

此示例演示了线程对资源执行死锁,现在它们已经获取了资源的锁,可以使用命令行中提到的命令通过 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.");
}
}
登录后复制

输出:

Java 转储

如何获取上述编译代码的转储,可以使用以下命令来完成:

  • First, retrieve the process id using the following command in the command line: jsp
  • Then, after getting the process id run the following command in the command line :
Jcmd<Process_id> GC.heap_dump <file-path>
jcmd 20528 GC.heap_dump C:\Users\adutta\eclipse-workspace\Matcher_Example\src
登录后复制

Conclusion

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中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板