jvm啟動常用參數配置


一、    常用參數
  -Xms 
  JVM啟動時申請的初始Heap值,默認為操作系統物理內存的1/64但小於1G。默認當空余堆內存大於70%時,JVM會減小heap的大小到-Xms指定的大小,可通過-XX:MaxHeapFreeRation=來指定這個比列。Server端JVM最好將-Xms和-Xmx設為相同值,避免每次垃圾回收完成后JVM重新分配內存;開發測試機JVM可以保留默認值。(例如:-Xms4g)

  -Xmx 
  JVM可申請的最大Heap值,默認值為物理內存的1/4但小於1G,默認當空余堆內存小於40%時,JVM會增大Heap到-Xmx指定的大小,可通過-XX:MinHeapFreeRation=來指定這個比列。最佳設值應該視物理內存大小及計算機內其他內存開銷而定。(例如:-Xmx4g)

  -Xmn 
  Java Heap Young區大小。整個堆大小=年輕代大小 + 年老代大小 + 持久代大小(相對於HotSpot 類型的虛擬機來說)。持久代一般固定大小為64m,所以增大年輕代后,將會減小年老代大小。此值對系統性能影響較大,Sun官方推薦配置為整個堆的3/8。(例如:-Xmn2g)

  程序新創建的對象都是從年輕代分配內存,年輕代由Eden Space和兩塊相同大小的SurvivorSpace(通常又稱S0和S1或From和To)構成,可通過-Xmn參數來指定年輕代的大小,也可以通過-XX:SurvivorRation來調整Eden Space及SurvivorSpace的大小。

老年代用於存放經過多次新生代GC仍然存活的對象,例如緩存對象,新建的對象也有可能直接進入老年代,主要有兩種情況:1、大對象,可通過啟動參數設置-XX:PretenureSizeThreshold=1024(單位為字節,默認為0)來代表超過多大時就不在新生代分配,而是直接在老年代分配。2、大的數組對象,且數組中無引用外部對象。老年代所占的內存大小為-Xmx對應的值減去-Xmn對應的值。如果在堆中沒有內存完成實例分配,並且堆也無法再擴展時,將會拋出OutOfMemoryError異常。

 -Xss 

  Java每個線程的Stack大小。JDK5.0以后每個線程堆棧大小為1M,以前每個線程堆棧大小為256K。根據應用的線程所需內存大小進行調整。在相同物理內存下,減小這個值能生成更多的線程。但是操作系統對一個進程內的線程數還是有限制的,不能無限生成,經驗值在3000~5000左右。(例如:-Xss1024K)

  -XX:PermSize
  持久代(方法區)的初始內存大小。(例如:-XX:PermSize=64m)

  -XX:MaxPermSize
  持久代(方法區)的最大內存大小。(例如:-XX:MaxPermSize=512m)

  -XX:+UseSerialGC
  串行(SerialGC)是jvm的默認GC方式,一般適用於小型應用和單處理器,算法比較簡單,GC效率也較高,但可能會給應用帶來停頓。

  -XX:+UseParallelGC
  並行(ParallelGC)是指多個線程並行執行GC,一般適用於多處理器系統中,可以提高GC的效率,但算法復雜,系統消耗較大。(配合使用:-XX:ParallelGCThreads=8,並行收集器的線程數,此值最好配置與處理器數目相等)

  -XX:+UseParNewGC
  設置年輕代為並行收集,JKD5.0以上,JVM會根據系統配置自行設置,所以無需設置此值。

  -XX:+UseParallelOldGC
  設置年老代為並行收集,JKD6.0出現的參數選項。

  -XX:+UseConcMarkSweepGC
  並發(ConcMarkSweepGC)是指GC運行時,對應用程序運行幾乎沒有影響(也會造成停頓,不過很小而已),GC和app兩者的線程在並發執行,這樣可以最大限度不影響app的運行。

  -XX:+UseCMSCompactAtFullCollection
  在Full GC的時候,對老年代進行壓縮整理。因為CMS是不會移動內存的,因此非常容易產生內存碎片。因此增加這個參數就可以在FullGC后對內存進行壓縮整理,消除內存碎片。當然這個操作也有一定缺點,就是會增加CPU開銷與GC時間,所以可以通過-XX:CMSFullGCsBeforeCompaction=3 這個參數來控制多少次Full GC以后進行一次碎片整理。

  -XX:+CMSInitiatingOccupancyFraction=80
  代表老年代使用空間達到80%后,就進行Full GC。CMS收集器在進行垃圾收集時,和應用程序一起工作,所以,不能等到老年代幾乎完全被填滿了再進行收集,這樣會影響並發的應用線程的空間使用,從而再次觸發不必要的Full GC。

  -XX:+MaxTenuringThreshold=10
  垃圾的最大年齡,代表對象在Survivor區經過10次復制以后才進入老年代。如果設置為0,則年輕代對象不經過Survivor區,直接進入老年代。

詳情請參考:https://blog.csdn.net/wang379275614/article/details/78471604?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase


免責聲明!

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



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