Trace跟蹤參數
-verbose:gc
-XX:+printGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:log/gc.log // 指定GC log的位置,以文件輸出
-XX:PrintHeapAtGC // 每一次GC后,都打印堆信息
// 類加載信息
-XX:TraceClassLoading
-XX:+PrintClassHistogram
-Ctrl +Break 打印類信息, 類的使用情況
堆的分配參數
-Xmx -Xms
- 指定最大堆 和最大堆
System.out.print("Xmx");
System.out.println(Runtime.getRuntime().maxMemory()/1024.0/2014+"M");

內存分配



-Xmn
-設置新生代大小
-XX:NewRatio
- 新生代(eden +2*s) 和老年代(不含永久區)的比值
-4 表示新生代:老年代=1:4 ,即年輕代占堆的1/5
-XX:SurvivorRatio
- 設置兩個SurvivorRatio 區和eden 的比
-8 表示 兩個Survivor:eden =2:8,即一個Survivor 占年輕代的1/10
-XX: +HeapDumpOnOutOfMemoryError
- OOM時導出堆到文件
-XX:+HeapDumpPath
- 導出OOM的路徑
-Xmx20m -Xms5m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump
-Vector v = new Vector();
for(int i=0;i<25;i++){
v.add(new byte[1*1024*1024]);
} // 模擬OOM
-XX:OnOutOfMemoryError
-在OOM時執行一個腳本
- "-XX:OnOutOfMemoryError=D:/tools/jdk1.7_40/bin/printstack.bat %p"
-當程序OOM時,在D:/a.txt中將會生成線程的dump
-可以在OOM時,發送郵件,甚至是重啟程序
永久區分配參數
-XX:PermSize -XX:MaxPermSize
- 設置永久區的初始空間和最大空間
-他們表示,一個系統可以容納多少個類型
使用CGLIG等庫的時候,可能會產生大量的類,這些類,有可能會撐爆永久區導致OOM
for(int i=0;i<100000;i++){
CglibBean bean = new CglibBean("geym.jvm.ch3.perm.bean",new HashMap());
}
如果堆空間沒有用完也拋出了OOM,有可能是永久區導致的
棧大小分配
-Xss
通常只有 幾百K
決定了函數調用的深度
每個線程都有獨立的棧空間
局部變量,參數,分配在棧上
每個線程私有的區域,線程數*棧空間 =所有線程占的空間, 如果想讓系統跑更多的線程,則需要把棧大小設置小一點。

