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)处循环