java.lang.management 包 初探

本文详细介绍了如何通过Java API获取JVM的内存快照、线程堆栈和GC日志,并通过jconsole和jvisualVM工具实现内存管理与调试。包括获取HotSpot虚拟机的heapDump方法、ThreadDump方法以及配置GC日志。
可以参考这个文章 http://jiangnanguying.iteye.com/blog/539697

当然,java api里边这个包的说明更值得参考
/java/lang/management/package-summary.html

jdk bin下的 jconsole 和jvisualVm 这两个工具所实现的功能基本上都能够从这个包的类和方法里找到。


获取jvm 的 heapDump方法:
对于HotSpot虚拟机来说,可以利用rt.jar 里边的HotSpotDiagnosticMXBean 来获取


bean = ManagementFactory.newPlatformMXBeanProxy(server,
"com.sun.management:type=HotSpotDiagnostic", HotSpotDiagnosticMXBean.class);

//注意此处的参数是 在目标虚拟机上的操作系统路径 ,而不是这个程序执行的操作系统的路径 特别是在取服务器上的时候,更要特别注意,同时也要注意权限等问题
bean.dumpHeap("a.hprof", true);



获取 ThreadDump方法:

ThreadMXBean threadBean = ManagementFactory.newPlatformMXBeanProxy(
mbs, ManagementFactory.THREAD_MXBEAN_NAME,
ThreadMXBean.class);
// ThreadMXBean bean =ManagementFactory.getThreadMXBean();
for (ThreadInfo info : threadBean.dumpAllThreads(true, true))
//然后...你懂的


获取GClog

在程序的启动参数中 配置

-verbose:gc -Xloggc:gc.log 当然 gc.log只是个文件名 你可以加上路径等等 呵呵。


另外发现

CodeCacheManager
java.lang:type=MemoryManager,name=CodeCacheManager
CodeCacheManager managed Code Cache
PS Scavenge
java.lang:type=GarbageCollector,name=PS Scavenge
PS Scavenge managed PS Eden Space
PS Scavenge managed PS Survivor Space
PS MarkSweep
java.lang:type=GarbageCollector,name=PS MarkSweep
PS MarkSweep managed PS Eden Space
PS MarkSweep managed PS Survivor Space
PS MarkSweep managed PS Old Gen
PS MarkSweep managed PS Perm Gen

居然PS MarkSweep 管理了 四个区域 呵呵 三个堆相关的 一个永久代 居然也是它负责..

附件是例子
Java 中,`java.lang.management` 提供了一组用于管理和监控 Java 应用程序的工具,其中括对垃圾回收(Garbage Collection, GC)的监控。以下是如何使用这个来监控垃圾回收的基本步骤: 1. **获取垃圾回收管理器**: 使用 `ManagementFactory` 类获取 `GarbageCollectorMXBeans`,这些 MXBeans 代表 JVM 中配置的所有垃圾回收器。 2. **注册通知**: 可以为特定的垃圾回收事件注册一个通知监听器,比如垃圾回收开始、结束等。 3. **查询和打印垃圾回收信息**: 可以查询并打印出关于垃圾回收的各种统计信息,如垃圾回收次数、耗时等。 下面是一个使用 `java.lang.management` 来监控垃圾回收的简单示例代码: ```java import java.lang.management.GarbageCollectorMXBean; import java.lang.management.ManagementFactory; import java.util.List; public class GCMonitor { public static void main(String[] args) { // 获取所有垃圾回收器的列表 List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans(); // 遍历每个垃圾回收器并打印其名称和收集次数 for (GarbageCollectorMXBean gcBean : gcBeans) { System.out.println("Garbage Collector Name: " + gcBean.getName()); System.out.println("Collection Count: " + gcBean.getCollectionCount()); System.out.println("Collection Time: " + gcBean.getCollectionTime() + " ms"); } } } ``` 这段代码会输出 JVM 中配置的每个垃圾回收器的名称、收集次数以及总的收集时间。通过这种方式,开发者可以监控和分析垃圾回收的性能,进而优化应用的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值