jconsole
查看Java应用程序运行时情况,监视垃圾收集器的内存变化趋势,以及监视程序内的线程。在控制台输入jconsole即可启动JConsole客户端
JConsole客户端包括概览、内存、线程、类、VM概要、MBean这大块。
概览:主要运行数据的概览,包括堆内存,线程,类,CPU使用情况四项信息的变化趋势图
内存:可以监视堆内存以及其中各个区域(Eden区,Survivor区,老年代)的变化趋势,还可以监视非堆(元空间)的内存变化趋势,相当于命令行中的jstat
线程:可以查看当前程序有哪些线程在运行,单机可以查看线程的堆栈信息,相当于命令行工具的jstack,其左下角还有检测死锁的按钮。
类:如图所示,显示了系统以及装载的类数量。在详细信息栏中,还显示了已卸载的类数量。
jvisualvm
jvisualvm用来解决Java代码产生的问题,下面用一个死锁的案列来进行说明
Thread thread = new Thread() { @Override public void run() { synchronized (integer1){ System.out.println("lock1获取到integer1对象"); synchronized (integer2){ System.out.println("获取到integer2对象"); } } } }; Thread thread1 = new Thread(){ @Override public void run(){ synchronized (integer2){ System.out.println("lock2获取到integer2对象"); synchronized (integer1){ System.out.println("获取到integer1对象"); } } } }; thread.start(); thread1.start();
在控制台输入jvisualvm命令,选择我们的线程
点击线程后,由图可知已经检测到了死锁问题
再点击线程dump后就可以在该页面找到对应Java代码中出现的问题位置
这样我们就可以快速的找到代码出现问题的地方,快速的解决debug
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)