常用JVM配置參數


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

    決定了函數調用的深度

    每個線程都有獨立的棧空間

    局部變量,參數,分配在棧上

    每個線程私有的區域,線程數*棧空間 =所有線程占的空間, 如果想讓系統跑更多的線程,則需要把棧大小設置小一點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM