Jconsole观察java程序

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

image

在本地启动一个程序:JConsole进入

image

但是显示异常:连接失败,是否重试

image

想要使用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
image

选择主类

image

添加参数

image

重新建立连接:

image

点击“不安全连接”后键入监控平台:

image
内存区、非内存区监控
image

测试代码:

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,新生代内存被回收,对象进入老年代,对象未被真正清理。

image
老年代:
image

代码中不断加入到list集合中,即对象被引用,无法被收集器标记“死亡”,也就不会被垃圾收集器清理,随着每次gc,对象“年龄”增长,由新生代进入老年代,随着时间增加,会造成内存溢出

posted @ 2021-06-01 23:39  光头_强  阅读(92)  评论(0编辑  收藏  举报