記錄篇:JVM運行參數設置

設置步驟(idea下)

  • 很簡單,直接看圖吧,點這裏
    在這裏插入圖片描述
    修改VM options參數即可
    在這裏插入圖片描述

設置參數記錄

常用參數分配
  • -Xmx:最大堆內存,也就是新生代和老年代的大小之和的最大值,代碼Runtime.getRuntime().maxMemory()可以獲得最大堆內存大小(比如:-Xmx20M)
  • -Xms:最小堆內存,程序在運行時,首先會被分配的大小,如果設置過小,可能導致更加頻繁的GC操作,不利於系統的性能優化
  • Xmn:設置新生代大小,新生代如果過大,會影響老年代的大小。一把設置爲堆空間的14\frac{1}{4}13\frac{1}{3}左右(-XX:NewSize和-XX:MaxNewSize也是設置新生代,但是建議使用Xmn)
  • -XX:PermSize、-XX:MaxPermSize:永久空間大小,JDK8之前設置永久區大小的方法,JDK8之後已經沒有永久區了自然也設置不了
  • -Xss:線程棧的大小,如果過大,相應的能設置的線程數就會變少,如果過小局部變量或者函數的調用深度就會表少,
  • -XX:+PrintGCDetails : 打印GC的信息
空間比例分配
  • -XX:SurvivorRatio=8 : 表示新生代中eden是s0空間的8倍,而s0等與s1(舉例:新生代總共10M,eden就爲8M,而S0、S1分別個1M)
  • -XX:NewRatio=2:表示老年代是新生代的2倍(舉例:堆爲21M,那麼老年代就是14M,新生代就是6M)
堆參數相關配置
  • -XX:MinHeapFree:設置堆最小的空閒比列。當堆空間的空閒內存小於這個數值時,JVM便會擴展堆空間
  • -XX:MaxHeapFree:設置堆最大的空閒比列。當堆空間的空閒內存大於這個數值時,JVM便會壓縮堆空間
  • -XX:TargetSurvivorRatio:設置survivior(倖存者,新生代中第二階段)區的可使用率。當survivior區的空間使用率達到這個數值時,會將對象送入老年代
  • -XX:PretenureSizeThreshold:設置大對象直接進入老年代的閾值。當大對象的大小超過這個值時,將直接在老年代分配。
  • -XX:MaxTenuringThreshold:設置對象進入老年代的年齡的最大值。每次GC後,對象年齡就加1.任何大於這個年齡的對象,一定會進入老年代
垃圾收集器設置
  • -XX:+UseSerialGC : 參數可以指定使用新生代串行收集器和老年代串行收集器
  • -XX:UseParNewGC : 新生代使用並行收集器,可與CMS收集同時使用。在serial基礎上實現的多線程收集器
  • -XX:UseParallelGC : 新生代使用並行收集器。可以同時並行多個垃圾收集線程,但此時用戶線程必須停止。
  • -XX:UseConcMarkSweepGC:新生代使用並行收集器
  • -XX:ParallelGCThreads:並行收集器的線程數參數指定
  • -XX:UseParallelOldGC:設置新生代爲並行回收收集器
  • -XX:+UseAdaptiveSizePolicy設置並行收集器爲自適應GC策略,系統可以自動配置最大堆吞吐量停頓時間的平衡
  • -XX:+UseParallelOldGC : 設置新生代和老年代都使用並行回收收集器
  • -XX:ParallelCMSThreads:手動的設定CMS的線程數量
  • -XX:CMSInitiatingOccupancyFraction:指定CMS的回收閥值,默認是68,即老年代閾值達到68%時,就開始回收
  • -XX:UseCMSCompactAtFullCollection:設置CMS是否開啓碎片整理
  • -XX:CMSFullGCsBeforeCompaction:設置多少次CMS後進行碎片整理
  • -XX:unlockExperimentalVMOptions -XX:+UseG1GC:啓用G1回收器
  • -XX:+TraceClassLoading:打印類的加載信息
  • -XX:+TraceClassUnloading:打印類的卸載信息
  • -XX:+PrintClassHistogram:打印運行時,實例的信息。當Ctrl + Pause Break被按下(idea情況下,選中信息輸出窗口),會輸出系統內類的統計信息
  • -XX:DisableExplicitGC:禁止手動觸發GC,也就是System.gc()失效
  • -XX:Xnoclassgc:禁止類卸載,也就是System.gc()失效

相關的異常信息

  • 如果堆內存過大,可能會導致計算機內存不夠,從而不能新建線程,報錯如下
java.lang.OutOfMemoryError:unable to create new native thread
  • 持久代(jdk8以前)空間不足,報錯方式如下:
java.lang.OutOfMemoryError: PermGen space
  • 堆空間不足,報錯如下
java.lang.OutOfMemoryError: Java heap space
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章