import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * Code which writes a stack dump for all threads to a file. */ public class DumpStack { // directory where the stack files are written private static final String STACK_DUMP_DIR = "./"; // here for testing public static void main(String[] args) throws Exception { dumpStacks(); } public static void dumpStacks() throws IOException { ThreadMXBean mxBean = ManagementFactory.getThreadMXBean(); ThreadInfo[] threadInfos = mxBean.getThreadInfo(mxBean.getAllThreadIds(), 0); Map<Long, ThreadInfo> threadInfoMap = new HashMap<Long, ThreadInfo>(); for (ThreadInfo threadInfo : threadInfos) { threadInfoMap.put(threadInfo.getThreadId(), threadInfo); } // choose our dump-file File dumpFile = new File(STACK_DUMP_DIR, "stacks." + System.currentTimeMillis()); Writer writer = new BufferedWriter(new FileWriter(dumpFile)); try { dumpTraces(mxBean, threadInfoMap, writer); } finally { writer.close(); } } private static void dumpTraces(ThreadMXBean mxBean, Map<Long, ThreadInfo> threadInfoMap, Writer writer) throws IOException { Map<Thread, StackTraceElement[]> stacks = Thread.getAllStackTraces(); writer.write("Dump of " + stacks.size() + " thread at " + new SimpleDateFormat("yyyy/MM/dd HH:mm:ss z").format(new Date(System.currentTimeMillis())) + "\n\n"); for (Map.Entry<Thread, StackTraceElement[]> entry : stacks.entrySet()) { Thread thread = entry.getKey(); writer.write("\"" + thread.getName() + "\" prio=" + thread.getPriority() + " tid=" + thread.getId() + " " + thread.getState() + " " + (thread.isDaemon() ? "deamon" : "worker") + "\n"); ThreadInfo threadInfo = threadInfoMap.get(thread.getId()); if (threadInfo != null) { writer.write(" native=" + threadInfo.isInNative() + ", suspended=" + threadInfo.isSuspended() + ", block=" + threadInfo.getBlockedCount() + ", wait=" + threadInfo.getWaitedCount() + "\n"); writer.write(" lock=" + threadInfo.getLockName() + " owned by " + threadInfo.getLockOwnerName() + " (" + threadInfo.getLockOwnerId() + "), cpu=" + (mxBean.getThreadCpuTime(threadInfo.getThreadId()) / 1000000L) + ", user=" + (mxBean.getThreadUserTime(threadInfo.getThreadId()) / 1000000L) + "\n"); } for (StackTraceElement element : entry.getValue()) { writer.write(" "); writer.write(element.toString()); writer.write("\n"); } writer.write("\n"); } } }
来自 http://pastebin.com/zwcKC0hz
相关推荐
另一种常见的打印堆栈的方法是通过故意抛出一个异常,然后捕获这个异常并打印其堆栈跟踪信息。这种方式简单粗暴但非常有效,特别适用于快速定位问题时。 ```java public static void printStackTrace() { try { ...
在信号处理器内部,调用`backtrace`和`backtrace_symbols`来获取并打印堆栈信息,然后再终止程序,以便开发者能根据这些信息分析问题。 在运维环境中,了解如何利用`libexecinfo`库可以大大提高故障诊断效率。例如...
### Java代码重构经验总结 在软件开发过程中,代码重构是一项重要的技能,它旨在不改变代码外部行为的前提下,改进其内部结构,从而提升代码质量和可维护性。本文将深入探讨Java代码重构的关键点,涵盖重构原则、...
在进行Java代码优化时,有多个方面需要考虑,本文档提供的是一系列详细的优化建议,涵盖了异常处理、资源管理、数据结构使用、性能提升等多个角度。首先,异常处理是代码优化的重要环节。不应该对所有异常都使用通用...
综上所述,这段代码提供了一个基础的银行管理系统登录界面实现示例,涵盖了Java Swing GUI设计、事件处理机制、JDBC数据库操作等方面的知识。不过,在实际开发过程中还需要注意代码的健壮性和安全性问题。
本篇文章将深入分析一段简单的Java源代码,该代码实现了文件的读取与写入操作,并对其中涉及的关键概念和技术进行详细介绍。 #### 二、核心概念 1. **InputStream**:这是Java中的一个抽象类,用于表示从数据源...
这里使用了`printStackTrace()`方法来打印异常堆栈信息,方便开发者定位问题。 #### 三、测试连接 在`main`方法中,通过调用`ConnectDB.connect()`方法来尝试建立数据库连接,并根据返回的结果判断连接是否成功: ...
- 在实际开发中,建议对异常进行更加详尽的处理,而不是简单地打印堆栈跟踪。 - 对于大型文件或大量文件的压缩,需要考虑内存消耗问题,适当调整缓冲区大小。 - 为确保兼容性,应明确指定字符集(如“GBK”),特别...
这段Java代码通过JDBC实现了向Oracle数据库批量插入数据的功能。关键步骤包括:建立数据库连接、准备SQL语句、批量添加SQL语句到批处理队列、执行批处理以及事务提交。这种方式相比于逐条插入数据,可以显著提升插入...
在你的项目中创建相应的C、C++、Java代码段,并确保正确配置编译选项。在运行时,根据所选语言调用相应的函数来打印call stack。对于内核空间,你可能需要修改内核源码,编译并加载内核模块,或者在系统启动时启用...
每段Java代码都从一个或多个类开始,这些类定义了对象的属性和行为。在"TestJava"文件中,可能会包含至少一个`public class TestJava`声明,这是Java程序的主入口点。 接下来是变量和数据类型。Java支持基本数据...
如果在设置过程中出现异常,会打印堆栈跟踪信息。 另外,也可以直接使用以下代码来设置"Nimbus"LookAndFeel: ```java UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); ``` 这是...
【可视卡打印程序(C++ builder)源代码】是一个基于C++ Builder开发的应用程序,用于打印可视化的卡片。C++ Builder是一款集成开发环境(IDE),它由Embarcadero Technologies公司开发,专为使用C++语言进行Windows...
本文档将详细解析一段能够运行成功的Java邮件发送代码,并对其关键部分进行深入解读。该代码已经在MyEclipse 6.5环境下测试通过。 #### 二、核心类与方法介绍 1. **`Properties` 类**: - `Properties` 类是Java...
以下是一个简单的Java代码示例,用于解压ZIP文件: ```java import java.io.*; import java.util.zip.*; public class JieYaZip { public static void main(String[] args) { String zipFilePath = "path_to_...
【飞机大战Java源代码分析】 ...总结:这段Java代码展示了如何用面向对象编程设计一个简单的飞机游戏,包括飞机对象的创建、绘图、移动以及键盘事件的处理。了解这些概念对于理解Java游戏开发的基础原理至关重要。
1. **错误处理**:代码中的异常处理仅通过`ex.printStackTrace()`打印堆栈跟踪,这在调试阶段可能有用,但在生产环境中应捕获具体异常并采取适当措施,如记录日志或返回错误信息。 2. **资源管理**:虽然代码中关闭...
`IOException`的处理确保了在出现错误时能够适当地打印堆栈跟踪信息,并确保最后总是关闭输入和输出流,这是良好的编程实践。 接下来,第二个知识点涉及到创建一个简单的Java Swing GUI。在标签中没有明确提及Swing...
2. 内存限制:由于要在内存中连续分配一段空间,当数组较大时可能会受到内存限制。 Array的适用场景包括: 1. 当需要存储具有相同类型的固定数量元素,并对特定位置进行高效访问时,数组是一个很好的选择。 2. ...
其中,`pid` 是Java进程的ID,`-l` 选项会提供更详细的线程和锁信息,而 `-F` 选项则用于在进程无响应时强制打印堆栈信息。 当Java程序出现挂起(hung)或者死锁(Deadlock)等问题时,jstack尤为重要。它可以显示...