public class StackOnTest { public static void alloc() { byte[] b = new byte[2]; b[0] = 1; } public static void main(String[] args) { Scanner sc=new Scanner(System.in); sc.nextLine(); } }
结果eclipse
解释结果图各列含义jvm
public class JInfoTest { private static void s2() { String name = ManagementFactory.getRuntimeMXBean().getName(); // get pid String pid = name.split("@")[0]; System.out.println("Pid is:" + pid); while (true) { byte[] b = null; for (int i = 0; i < 10; i++) b = new byte[1 * 1024 * 1024]; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { s2(); } }
有一点必须注意:PrintGC必须开启,只开启PrintGCDetails、PrintGCTimeStamps不会输出GC,必须PrintGC同时开启工具
1、jmap -histo PID在内存使用峰值先后分别dump一次,能够对比出GC回收了哪些对象。spa
2、jmap -dump:format=b,file=f1 PID 将该内存heap输出到f1文件里,配合eclipse插件MemoryAnalyzer来使用插件