JVM工具类,提供jstack jmap memory等信息的输出.
import java.io.File; import java.io.OutputStream; import java.lang.management.ManagementFactory; import java.lang.management.MemoryMXBean; import java.security.AccessController; import java.security.PrivilegedExceptionAction; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.management.MBeanServer; import javax.management.ObjectName; import com.sun.management.HotSpotDiagnosticMXBean; public class JVMUtil { private static final String HOTSPOT_BEAN_NAME = "com.sun.management:type=HotSpotDiagnostic"; private static volatile HotSpotDiagnosticMXBean hotspotMBean; private static volatile MemoryMXBean memoryMBean; private static Object lock = new Object(); public static void jMap(String fileName, boolean live) throws Exception { try { initHotspotMBean(); File f = new File(fileName); if (f.exists()) { f.delete(); } hotspotMBean.dumpHeap(fileName, live); } catch (Exception e) { throw e; } } public static void jstack(OutputStream stream) throws Exception { try { Map<Thread, StackTraceElement[]> map = Thread.getAllStackTraces(); Iterator<Map.Entry<Thread, StackTraceElement[]>> ite = map.entrySet().iterator(); while (ite.hasNext()) { Map.Entry<Thread, StackTraceElement[]> entry = ite.next(); StackTraceElement[] elements = entry.getValue(); if (elements != null && elements.length > 0) { String threadName = entry.getKey().getName(); stream.write(("Thread Name :[" + threadName + "]\n").getBytes()); for (StackTraceElement el : elements) { String stack = el.toString() + "\n"; stream.write(stack.getBytes()); } stream.write("\n".getBytes()); } } } catch (Exception e) { throw e; } } public static double memoryUsed(OutputStream stream) throws Exception { try { initMemoryMBean(); stream.write("**********************************Memory Used**********************************\n".getBytes()); String heapMemoryUsed = memoryMBean.getHeapMemoryUsage().toString() + "\n"; stream.write(("Heap Memory Used: " + heapMemoryUsed).getBytes()); String nonHeapMemoryUsed = memoryMBean.getNonHeapMemoryUsage().toString() + "\n"; stream.write(("NonHeap Memory Used: " + nonHeapMemoryUsed).getBytes()); return (double) (memoryMBean.getHeapMemoryUsage().getUsed()) / memoryMBean.getHeapMemoryUsage().getMax(); } catch (Exception e) { throw e; } } private static HotSpotDiagnosticMXBean getHotspotMBean() throws Exception { try { return AccessController.doPrivileged(new PrivilegedExceptionAction<HotSpotDiagnosticMXBean>() { public HotSpotDiagnosticMXBean run() throws Exception { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); Set<ObjectName> s = server.queryNames(new ObjectName(HOTSPOT_BEAN_NAME), null); Iterator<ObjectName> itr = s.iterator(); if (itr.hasNext()) { ObjectName name = itr.next(); HotSpotDiagnosticMXBean bean = ManagementFactory.newPlatformMXBeanProxy(server, name.toString(), HotSpotDiagnosticMXBean.class); return bean; } else { return null; } } }); } catch (Exception exp) { throw exp; } } private static MemoryMXBean getMemoryMBean() throws Exception { try { return AccessController.doPrivileged(new PrivilegedExceptionAction<MemoryMXBean>() { public MemoryMXBean run() throws Exception { return ManagementFactory.getMemoryMXBean(); } }); } catch (Exception exp) { throw exp; } } private static void initHotspotMBean() throws Exception { if (hotspotMBean == null) { synchronized (lock) { if (hotspotMBean == null) { hotspotMBean = getHotspotMBean(); } } } } private static void initMemoryMBean() throws Exception { if (memoryMBean == null) { synchronized (lock) { if (memoryMBean == null) { memoryMBean = getMemoryMBean(); } } } } }
相关推荐
IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...
1. **JConsole**:这是Java SDK自带的一个图形化监控工具,可以查看JVM的内存使用情况、线程状态、类加载情况等。 2. **VisualVM**:功能更为强大的多合一JVM分析工具,提供CPU和内存分析、线程快照、方法Profiling...
`jstat` 是Java监控和诊断工具的一部分,用于收集JVM的各种运行时统计信息,如垃圾收集器的状态、类装载情况、内存使用等。它能实时监控JVM性能,对性能调优非常有帮助。例如,`jstat -gc`可以显示垃圾回收的详细...
### JVM工具、参数调优与调试技巧 #### 一、JVM工具 ##### 1. jps:虚拟机进程状况工具 - **简介**:`jps` 是一个用于显示当前运行的所有Java虚拟机进程(JVMs)的简单工具。它会列出每个JVM的PID(进程ID)以及...
### JVM实战-JVM类加载机制案例分析 #### 实验背景与目标 本次实验的主要目的是深入理解Java虚拟机(JVM)中的类加载机制。通过实践操作,掌握类的加载、连接与初始化过程,了解不同类型的类加载器及其工作原理,...
JVM(Java Virtual Machine)是Java程序运行的基础,它负责解释和执行字节码,管理内存,以及处理线程和类加载。为了有效地监控和调试Java应用程序,Oracle JDK提供了多种强大的命令行工具,如jconsole、jmap、jstat...
《JVM工具、参数调优&调试技巧》 在Java开发中,理解并掌握JVM(Java虚拟机)的工作原理及优化技术是至关重要的。本文将深入探讨JVM的工具、参数调优以及调试技巧,旨在帮助开发者提升应用性能,减少系统故障。 一...
2. **对象计数**:工具可以统计特定类的对象数量,如果数量异常增加,可能意味着存在内存泄漏。 3. **引用链分析**:MAT可以显示对象间的引用路径,帮助找出导致对象无法被垃圾收集的原因。 4. **DOM泄漏分析**:...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具。它被广泛用于诊断和解决Java应用程序中的内存泄漏、内存消耗过高以及性能问题。MAT提供了一种直观的方式来查看和理解堆内存的...
为了有效地进行JVM调优,开发人员和运维人员通常会使用各种工具。本文将详细介绍两款常用的JVM调优工具——JConsole和VisualVM。 首先,JConsole是Java 5及更高版本JDK自带的一款监控和管理控制台。它基于JMX(Java...
jstat 是一个用于监视 JVM 内存使用情况的强大工具,它可以提供有关堆内存、非堆内存、类加载和垃圾收集器活动的详细信息。通过 jstat,你可以监控 JVM 各个区域的内存使用率,包括年轻代、老年代和永久代,这对于...
**用途**:监控JVM的各种运行状态信息,包括类装载、垃圾回收、运行时编译等。 **命令格式**: ``` jstat [generalOption | outputOption] vmid [interval[s|ms] [count]] ``` **执行示例**: ``` jstat -gcutil ...
被动使用则是在JVM运行过程中,由于JVM或JDK内部需要而进行的加载,如JNI查找类、JDK工具类的使用等。 在Java开发中,理解JVM的类加载机制对于优化性能、解决类冲突问题、实现自定义类加载器等都有重要意义。例如,...
MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的JVM内存分析工具,尤其适用于诊断Java应用程序的内存泄漏问题。在Java开发过程中,内存溢出(Out Of Memory)问题常常会导致程序异常终止,而MAT就是解决这类...
例如,可以使用`jvmtiEnv->Get*Info`函数获取关于JVM、类、线程和方法的详细信息。同时,通过注册事件回调,代理可以在特定事件发生时接收通知,例如`jvmtiEvent`中的`VMStart`、`ClassLoad`或`AllocationEvent`等。...
1. JVM原理:JVM的工作原理涉及类加载器(ClassLoader)、类文件(ClassFile)、内存管理及垃圾收集机制。类加载器负责将.class文件加载到内存中,为程序的运行准备数据结构。内存管理涉及JVM内存区域,包括堆、栈、...
永久代存储类元数据,现代JVM(如Java 8及以上版本)使用元空间(Metaspace)代替。 Java相关工具,如JConsole、VisualVM、JProfiler等,可以帮助监控和分析JVM的运行状态,包括内存使用、垃圾收集、线程和CPU负载...