深入JVM JConsole监视工具

Jconsole(Java Monitoring and Management Console)是一种基于JMX的可视化监视,管理工具。

位于JDK/bin目录下,通过 “jconsole.exe”启动JConsole后,可自动检索处本机的虚拟机进程

连接后,主要包括内存,线程,类,等子面板

——内存监视

这段程序以64KB/50毫秒的速度向Java堆中填充数据,一共执行1000次

设置虚拟机启动参数: -Xms100m -Xmx100m -XX:+UseSerialGC

public class Jconsole_demo {
	
	static class OOMObject
	{
		public byte[] placeholder=new byte[64*1024];
	}
	public static void fillheap(int num)throws InterruptedException
	{
		List<OOMObject> list=new ArrayList<OOMObject>();
		for(int i=0;i<num;i++)
		{
			Thread.sleep(50);//稍作延时
			list.add(new OOMObject());
		}
		System.gc();
	}
	

	public static void main(String[] args) throws Exception{
		// TODO 自动生成的方法存根
		fillheap(1000);

	}

}

程序运行后,内存面板可见Eden区呈现折线上升状,而整个堆呈现向上增长的平滑曲线。

1000次循环之后,System.gc()后,新生代的Eden区和Survivor区基本被清空

——线程监控

利用JConsole的线程监控面板可以查看线程状态

实例演示:

public class JConsole_demo2 {
	
	//线程死循环
	public static void createBusyThread()
	{
		Thread thread=new Thread(
				
				
				new Runnable()
				{
					@Override
					public void run()
					{
						while(true)
							;
					}
				}
				
				,"testBusyThread");
		thread.start();
	}
	
	//线程锁等待
	public static void createLockThread(final Object lock)
	{
		Thread thread=new Thread(
				new Runnable()
				{
					@Override
					public void run()
					{
						synchronized(lock)
						{
							try
							{
								lock.wait();
							}catch(InterruptedException e)
							{
								e.printStackTrace();
							}
						}
					}
				}
				
				
				,"testLockThread");
	}
	

	public static void main(String[] args) throws Exception{
	
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		br.readLine();
		createBusyThread();
		br.readLine();
		Object obj=new Object();
		createLockThread(obj);	

	}

}

一开始Main线程readByte()方法等待System.in键盘输入,为Runnable状态

接着执行testBusyThread线程,它处于死循环一直执行状态 

 可以看到线程一直在运行Java:19行代码也就是 while(true)处循环

猜你喜欢

转载自blog.csdn.net/qq_33369979/article/details/87902209
今日推荐