赞
踩
在jdk中就有jconsole.exe(图形化监控界面)在jdk/bin目录下,其真正的代码在lib包下的tools.jar
在cmd中输入jps即可查看当前运行的java进程
点击连接进入
import java.util.ArrayList; import java.util.List; public class JConsoleTest { // public byte[] b1 = new byte[128 * 1024];//成员变量,垃圾回收机制不回收 public JConsoleTest() { byte[] b1 = new byte[128 * 1024];// 局部变量,不被使用,垃圾回收机制会将其回收 } public static void main(String[] args) { try { Thread.sleep(5000);//睡眠只是为了让你有时间去打开可视化监控工具0.0 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("start");//启动标志 fill(1000); } private static void fill(int n) { List<JConsoleTest> jList = new ArrayList<>(); for (int i = 0; i < n; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } jList.add(new JConsoleTest()); } } }
可将上述代码中的局部变量和成员变量交替使用,再使用jvm可视化监控工具可看出,成员变量的内存,垃圾回收机制并没有回收,而是一直增加,直至代码运行结束;而局部变量的内存,垃圾回收则定时回收,成锯齿状。
以上是本人通过学习叶子猿老师的深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)学习笔记,若有问题,请及时联系我删除。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。