JConsole是JDK自带的调试程序,位于jDK的bin目录下:\jdk1.8.0_73\bin
JDK的bin目录下还提供了其他小巧的工具,如:jps.exe jhat.exe,jhat.exe jmap.exe等工具
在window上双击显示如下:

、

想要使用Jconsole实现监控必须添加以下参数:(重要)
-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote  -Dcom.sun.management.jmxremote.port=3210  -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false
127.0.0.1是主机IP,如果是远程主机就填写远程主机ip
3210:端口,未被占用就行
在Eclipse添加虚拟机参数:
右击:选择Run Configurations





内存区、非内存区监控

测试代码:
public class OutOfMemoryErrorTest {
	static class OObject{}
	private static List <OObject> list = new ArrayList<OObject>();
	public static void main(String[] args) throws InterruptedException {
		while (true) {
		    Thread.sleep(100);
			System.out.println("1111111111111");
		     list.add(new OObject());
		}
	}
}
点击执行GC:观察PS Eden Space(新生代) 和 old Gen(老年代)内存关系:
执行GC,新生代内存被回收,对象进入老年代,对象未被真正清理。

老年代:

代码中不断加入到list集合中,即对象被引用,无法被收集器标记“死亡”,也就不会被垃圾收集器清理,随着每次gc,对选哪个“年龄”增长,有新生代进入老年代,随着时间增加,会造成内存溢出
原文:https://www.cnblogs.com/ldd525/p/14839352.html