4-JVM 參數

2020-09-22 趙小胖0914

JVM 參數

  1. 標準參數:不會隨著jdk版本的變化而變化。比如:java -version、java -help
  2. 非標準參數:隨著JDK版本的變化而變化。 -X參數【用的較少】非標準參數,也就是在JDK各個版本中可能會變動 compiled 編譯執行方式,第一次使用就編譯成本地代碼 java -Xcomp -version mixed 默認的混合執行方式,混合模式,JVM自己來決定 java -Xmixed -version -XX參數【用的最多:JVM調優額Debug】非標準化參數,相對不穩定。 boolean類型 格式:-XX:[+-]<name> +或-表示啟用或者禁用name屬性 比如: -XX:+UseConcMarkSweepGC 表示啟用CMS類型的垃圾回收器 -XX:+UseG1GC 表示啟用G1類型的垃圾回收器 設置初始堆內存 -XX:initialHeapSize=100M 設置最大堆內存 -XX:MaxHeapSize=100M 34;"

以下方式是當JAVA進程已經啟動後該如何設置

  1. 實時修改某個JVM參數的值 jinfo修改(參數只有被標記為manageable的flags可以被實時修改)

常用參數:

參數 含義 說明

XX:CICompilerCount=3 最大並行編譯數 如果設置大於1,雖然編譯速度會提高,但是同樣影響系統穩定性,會增加JVM崩潰的可能

-XX:InitialHeapSize=100M 初始化堆大小 簡寫-Xms100M

-XX:MaxHeapSize=100M 最大堆大小 簡寫-Xmx100M

-XX:NewSize=20M 設置年輕代的大小

-XX:MaxNewSize=50M 年輕代最大大小

-XX:OldSize=50M 設置老年代大小

-XX:MetaspaceSize=50M 設置方法區大小

-XX:MaxMetaspaceSize=50M 方法區最大大小

-XX:+UseParallelGC 使用UseParallelGC 新生代,吞吐量優先

-XX:+UseParallelOldGC 使用UseParallelOldGC 老年代,吞吐量優先

-XX:+UseConcMarkSweepGC 使用CMS 老年代,停頓時間優先

-XX:+UseG1GC 使用G1GC 新生代,老年代,停頓時間優先

-XX:NewRatio 新老生代的比值 比如-XX:Ratio=4,則表示新生代:老年代=1:4,也就是新生代佔整個堆內存的1/5 -XX:SurvivorRatio 兩個S區和Eden區的比值 比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一個S佔整個新生代的1/10

-XX:+HeapDumpOnOutOfMemoryError 啟動堆內存溢出列印 當JVM堆內存發生溢出時,也就是OOM,自動生成dump文件

-XX:HeapDumpPath=heap.hprof 指定堆內存溢出列印目錄 表示在當前目錄生成一個heap.hprof文件

XX:+PrintGCDetails -XX:+PrintGCTimeStamps

-XX:+PrintGCDateStampsXloggc:$CATALINA_HOME/logs/gc.log 列印出GC日誌 可以使用不同的垃圾收集器,對比查看GC情況 -Xss128k 設置每個線程的堆棧大小 經驗值是3000-5000最佳

-XX:MaxTenuringThreshold=6 提升年老代的最大臨界值 默認值為 15

-XX:InitiatingHeapOccupancyPercent 啟動並發GC周期時堆內存使用佔比 G1之類的垃圾收集器用它來觸發並發GC周期,基於整個堆的使用率,而不只是某一代內存的使用比. 值為 0 則表示」一直執行GC循環」. 默認值為 45.

-XX:G1HeapWastePercent 允許的浪費堆空間的佔比 默認是10%,如果並發標記可回收的空間小於10%,則不會觸發MixedGC。

-XX:MaxGCPauseMillis=200ms G1最大停頓時間 暫停時間不能太小,太小的話就會導致出現G1跟不上垃圾產生的速度。最終退化成Full GC。所以對這個參數的調優是一個持續的過程,逐步調整到最佳狀態

-XX:ConcGCThreads=n 並發垃圾收集器使用的線程數量 默認值隨JVM運行的平臺不同而不同

-XX:G1MixedGCLiveThresholdPercent=65 混合垃圾回收周期中要包括的舊區域設置佔用率閾值 默認佔用率為 65%

-XX:G1MixedGCCountTarget=8 設置標記周期完成後,對存活數據上限為G1MixedGCLIveThresholdPercent 的舊區域執行混合垃圾回收的目標次數 默認8次混合垃圾回收,混合回收的目標是要控制在此目標次數以內

XX:G1OldCSetRegionThresholdPercent=1 描述Mixed GC時,Old Region被加入到CSet中 默認情況下,G1隻把10%的Old Region加入到CSet中

趙小胖個人博客

相關焦點

  • JAVA HEAP SPACE解決方法和JVM參數設置
    第二種情況,我們手工擴大JVM堆的參數設置。JVM堆的設置是指java程序運行過程中JVM可以調配使用的內存空間的設置。在JVM啟動時,JVM堆會自動設置heap size值。通常情況下,初始空間(即-Xms)默認值是物理內存的1/64,最大空間是物理內存的1/4。
  • Java Jvm 的分配參數概述
    1 java 應用程式設置最大堆內存與最小堆內存 1.1 最大堆內存 java應用程式可以使用最大堆內存可以用-Xmx參數指定最大堆內存指的是新生代和老年代的大小之和的最大值,是java應用程式的堆上限在java程序運行時可以通過 Runtime.getRuntime().maxMemory()取得系統的可用的最大堆內存1.2 最小堆空間 使用 -Xms可用於設置系統的最小堆空間,也就是jvm
  • JVM層面的切面實現 : jvm-sandbox 之 <應用啟動>
    <manifest> <mainClass>com.alibaba.jvm.sandbox.core.CoreLauncher</mainClass> </manifest></archive>找到啟動類 com.alibaba.jvm.sandbox.core.CoreLauncher
  • JVM層面的切面實現 : jvm-sandbox 之 <事件機制>
    概括的說就是,jvm-sandbox圍繞了目標方法這個切面點,提供了多種通知機制。= var4.respond; } } }效果上相當於第二個EventListener的插樁代碼是在第一個EventListener處理過的class後再進行處理。
  • JVM:可視化 JVM 故障處理工具
    <clinit>(WindbgDebuggerLocal.java:661) at sun.jvm.hotspot.HotSpotAgent.setupDebuggerWin32(HotSpotAgent.java:567) at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:335)
  • 程式設計師:深入理解JVM,從JVM層面來講Java多態
    這兩類分派方式的兩兩組合就構成了靜態單分派、靜態多分派、動態單分派、動態多分派這4種分派組合情況。<init>":()V4: returnpublic static void main(java.lang.String[]);Code:0: new #2 // class jvm/DynamicDispatch$Man
  • jmap 查看jvm堆內存信息
    Parallel GC with 4 thread(s)//GC 方式Heap Configuration: //堆內存初始化配置 MinHeapFreeRatio = 0 //對應jvm啟動參數-XX:MinHeapFreeRatio設置JVM堆最小空閒比率(default 40) MaxHeapFreeRatio =
  • Java面試總結之JVM
    3.GC(包括GC算法,垃圾回收器)4.JVM調優化下面就這4方面的知識點分別進行歸納總結。首先是校驗,此階段主要校驗class文件包含的信息是否符合jvm的規範。具體的校驗通過對文件格式,元數據,字節碼,符號引用驗證來完成。然後是準備,此階段為類變量分配內存,並將其初始化為默認值。最後是解析,即把類型中的符號引用轉換成為直接引用。具體的解析有4種,1.類或接口的解析,2.欄位解析,3.類方法解析,4.接口方法解析。完成這3個階段就完成了類的連接。
  • k8s pod自動重啟原因(jvm內存設置)
    那麼物理機的內存越大,默認分配的內存就越大(最大堆棧=1/4 * 物理機內存,初始堆棧=1/64 * 物理機內存)。JVM 是不知道自己在Docker容器中運行的,jvm識別的是物理主機的內存,而不是k8s給pod分配的內存或docker容器的內存。
  • jvm參數 -Xms -Xmx -Xmn -Xss調優,及具體實戰垃圾回收機制的配置
    jvm參數 -Xms -Xmx -Xmn -Xss調優01java自帶分析工具通過java自帶分析工具如果live子參數加上後,只統計活的對象數量。-permstat 列印classload和jvm heap長久層的信息,包含每個classloader的名字、活潑性、地址、父classloader和加載的class數量。另外,內部String的數量和佔用內存數也會列印出來。-F 強迫。在pid沒有相應的時候,使用-dump或者-histo參數。在這個模式下,live子參數無效。
  • 大廠面試系列(一)::JVM基礎
    survivor區作用jvm中一次完整的GC流程(從ygc到fgc)是怎樣的,重點講講對象如何晉升到老年代,幾種主要的jvm參數等 你知道哪幾種垃圾收集器,各自的優缺點,重點講下CMS 新生代垃圾收集是否會停頓 ,cms是否會停頓,在什麼時候停頓講講 GC,清除,整理,交換(survivor 區域),CMS 執行的過程
  • JVM中方法調用的底層實現,看這一篇就夠了
    : 4D4D4D; --tt-darkmode-color: C7254E; --tt-darkmode-color: F9F2F4; --tt-darkmode-bgcolor: C7254E; --tt-darkmode-color: F9F2F4; --tt-darkmode-bgcolor: 2 <com/morris/jvm/methodinvoke/InvokeSpecialDemo
  • 「Java面試題第一期」有沒有jvm調優經驗?調優方案有哪些?
    多數導致GC問題的Java應用,都不是因為我們參數設置錯誤,而是代碼問題;c. 在應用上線之前,先考慮將機器的JVM參數設置到最優(最適合);d. 減少創建對象的數量;e. 減少使用全局變量和大對象;f. JVM優化是到最後不得已才採用的手段;g. 在實際使用中,分析GC情況優化代碼比優化JVM參數更好;3.
  • JVM性能調優
    1、了解jvm啟動流程:2、了解硬體、系統、進程三個層面的內存之間的概要內存分配,一張圖你就懂堆內存分配,想了解參數的可以到最下面看下備註和建議:先來個日誌(看不懂那就看圖):
  • 大數據——HiveServer2 JVM調優實戰
    因為發現所有的hiveserver2的jvm參數都差不多,然後去查看gx最近剛剛啟動的在hiveserver2的jvm參數配置如下。通過以下參數想到的是新生代比例相對小,還有沒有配置end區和survivor區的比例,默認SurvivorRatio比例是8。我們知道每次young gc過後存活的對象都會存放到survivor區的s0或s1區,如果存放不下就會放到老年代去。
  • JVM源碼分析之Attach機制實現完全解讀
    大家是否注意過上面圈起來的兩個線程,」Attach Listener」和「Signal Dispatcher」,這兩個線程是我們這次要講的Attach機制的關鍵,先偷偷告訴各位,其實Attach Listener這個線程在jvm
  • JVM內幕:Java虛擬機詳解
    在這種情況下,本地方法棧的參數順序、返回值和典型的 C 程序相同。本地方法一般來說可以(依賴 JVM 的實現)反過來調用 JVM 中的 Java 方法。這種 native 方法調用 Java 會發生在棧(一般是 Java 棧)上;線程將離開本地方法棧,並在 Java 棧上開闢一個新的棧幀。
  • jvm堆內存和GC簡介
    最近經常遇到jvm內存問題,覺得還是有必要整理下jvm內存的相關邏輯,這裡只描述jvm堆內存,對外內存暫不闡述。jvm內存分為堆內存和非堆內存,堆內存分為年輕代、老年代,非堆內存裡只有個永久代。Serial GC算法:Serial Young GC + Serial Old GC (實際上它是全局範圍的Full GC);Parallel GC算法:Parallel Young GC + 非並行的PS MarkSweep GC / 並行的Parallel Old GC(這倆實際上也是全局範圍的Full GC),選PS MarkSweep GC 還是 Parallel Old GC 由參數
  • jvm - jps工具
    輸出傳遞給main 方法的參數,在嵌入式jvm上可能是null3、-lOutput the full package name for the application&39;s JAR file.4、-vOutput the arguments passed to the JVM.輸出傳遞給JVM的參數。
  • 三大步驟,一周啃透了JVM,順利拿下字節跳動研發崗Offer
    而作為一名Java使用者,掌握JVM的體系結構也是很有必要的,那麼如何才能結合以上內容更好的掌握jvm呢?今天我們就來一起談談吧。下面介紹我學習JVM的三個步驟,一周就吃透了JVM,讓我順順利利拿下了字節研發崗的offer。