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來使用插件