1. 程式人生 > >JVM常用參數

JVM常用參數

red failure 運行 permsize 計算機 多線程 iat out 大小

-Xmx: Java Heap最大值,默認值為物理內存的1/4,最佳設值應該視物理內存大小及計算機內其他內存開銷而定。

-Xms: Java Heap初始值,Server端JVM最好將-Xms和-Xmx設為相同值,開發測試機JVM可以保留默認值。將堆的最小值參數與最大值參數設置為一樣即可避免堆自動拓展。

-XX:+HeapDumpOnOutOfMemoryError:讓虛擬機在出現內存溢出異常時Dump出當前的內存堆轉儲快照以便時候進行分析。

-XX:PermSize與-XX:MaxPermSize:調節永久代內存區的上限(Java8或已放棄為方法區永久代單獨劃分內存區域)。

-XX:+/-UseTLAB:

有兩種堆對象內存分配的方式:“指針碰撞”(Bump the Pointer),另一種是“空閑列表”(Free List)。雖然書上說指針碰撞方法在多線程上會面臨不得不同步的問題(CAS),但空閑列表在某種程度上也避免不了同步問題吧。除CAS之外另一種解決同步問題的方式是把內存分配的動作按照線程劃分在不同的空間之中進行,即每個線程在Java堆中預先分配一小塊內存,稱為本地線程分配緩沖(Thread Local Allocation Buffer,TLAB)。哪個線程要分配內存,就在哪個線程的TLAB上分配,只有TLAB用完並分配新的TLAB時,才需要同步鎖定。虛擬機是否使用TLAB,可以通過-XX:+/-UseTLAB。

-Xss:每個線程的棧容量大小。

-XX:MaxDirectMemorySize:DirectMemory(直接內存)容量可通過這個參數指定,如果不指定則默認與Java堆最大值(-Xmx)一樣。


回收方法區:

HopSpot虛擬機提供了-Xnoclassgc參數進行控制是否對無用類進行回收,還可以使用

-verbose:class以及-XX:+TraceClassUnLoading查看類加載和卸載信息,其中-verbose:class和-XX:+TraceClassLoading可以在Product版的虛擬機中使用,

-XX:+TraceClassUnLoading參數需要FastDebug版的虛擬機支持。


-XX:+UseSerialGC:使用Serial + Serial Old收集器組合。

-XX:+UseParallelGC:使用Parallel Scavenge + Serial Old (PS MarkSweep)收集器組合。

-XX:+UseConcMarkSweepGC:使用CMS垃圾收集器。ParNew是使用CMS默認的新生代收集器。

-XX:+UserParNewGC:使用ParNew垃圾收集器。

-XX:+UseParallelOldGC:使用Parallel Scavenge + Parallel Old收集器組合。

-XX:SurvivorRatio:新生代中Eden區與Survivor區的容量比值。默認為8,代表Eden : Survivor = 8 : 1。

-XX:HandlePromotionFailure

-XX:ParallelGCThreads:設置ParNew收集器垃圾收集的線程數。

-XX:PretenureSizeThreshold:對象超過多大直接分配到老年代。

-XX:MaxTenuingThreshold:晉升到老年代的對象年齡。每個對象堅持過一個Minor GC之後,年齡就增加1,當超過這個參數值就進入老年代。

-XX:HandlePromotionFailure:是否允許分配擔保失敗,即老年代的剩余空間不足以應付新生代的整個Eden和Survivor區的所有對象都存活的極端情況。

針對Parallel Scavenge收集器

-XX:MaxGCPauseMillis:允許設置一個大於0的毫秒數,收集器將盡可能的保證內存回收花費的時間不超過設定值。

-XX:+UseAdaptiveSizePolicy:這是一個開關參數,當這個參數打開後就不需要手工指定新生代的大小、Eden與Survivor的比例、晉升老年代對象大小等參數細節,虛擬機會根據當前系統的運行情況收集性能監控信息,動態調整這些參數以提供最合適的停頓時間或者最大吞吐量。

-XX:GCTimeRatio:垃圾收集時間占總時間的比率,一個大0小於100的整數。計算方法:如果設置為19則,允許的最大GC時間就占總時間的5%(1 / (1 + 19))。

CMS收集器

-XX:CMSInitiatingOccupancyFraction:當老年代的內存空間被使用超過一定百分比之後就進行一次Full GC以避免因“浮動垃圾”造成的“Concurrent Mode Failure”。

-XX:+UseCMSCompactAtFullCollection:默認開啟,解決內存空間碎片化導致無法分配連續大空間的問題。在進行Full GC時進行一次內存碎片的合並過程。

-XX:CMSFullGCsBeforeCompaction:用於設置執行多少次不壓縮的Full GC後,進行一次內存碎片合並操作(默認為0,表示每次進入Full GC都進行碎片整理)。

更多JVM參數參考

JVM常用參數