精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

JVM的一些重要參數

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-09-25 15:56 ? 次閱讀

這一篇內容就只有滿滿的干貨,可以說是拿來即用。下面我們廢話少說,走起。

1.GC算法種類

目前OpenJDK中有以下幾種常見的GC算法。

  • Serial GC
  • Parallel GC
  • CMS GC (Concurrent Mark & Sweep)
  • G1 GC
  • Z GC

目前大多數的人使用Java8居多。如果沒有明確指定GC算法,那么Java8會使用默認Parallel GC。Java9開始 ,默認GC 是G1 GC算法。Java 17 默認也是G1 GC,其中個別版本會有點差異。

下面是常用GC算法使用命令。

GC AlgorithmJVM argument
Serial GC-XX:+UseSerialGC
Parallel GC-XX:+UseParallelGC
CMS GC-XX:+UseConcMarkSweepGC
G1 GC-XX:+UseG1GC
ZGC-XX:+UseZGC

網上大多數人都對ZGC算法的性能比較稱贊,如果是使用Java11以上的版本,那么可以考慮使用ZGC。奈何大多數同學們包括筆者都在Java8中久久不能自拔,所以我們這一篇就避開ZGC吧。

2. JVM的一些重要參數

JVM中的參數分為3類:

  • 標準參數(-),所有的JVM都必須實現這些參數的功能,并且必須向后兼容. 如java -version等
  • 非標準參數(-X),默認JVM實現這些功能,不保證所有的JVM都能使用,且不向后兼容。
  • 非Stable參數(-XX),這些參數每個JVM實現都會不同,而且將來可能取消,需要謹慎使用

關于非標準參數,我們使用 java -X 命令 即可找到這些參數,

  • -Xmn 新生代內存大小,包括E區和兩個S區,使用方法如下:-Xmn65535,-Xmn2048k,-Xmn512m, -Xmn2g (-Xms,-Xmx 也是同一種寫法)
  • -Xms 初始堆的大小,堆大小的最小值,默認值是物理內存的1/64(小于1G), 默認情況下,如果堆中可用內存小于40%時(調整參數 -X:MinHeapFreeRatio=40),堆內存會開始增加,一直增加到-Xmx的大小
  • -Xmx 堆的最大值,默認是物理內存的1/64,如果Xms和Xmx都不設置的話,兩者的大小會相同,默認情況下,當堆中可用內存大于70%時(調整參數 -X:MaxHeapFreeRatio=70),堆內存會開始減少,一直減少到-Xms的大小
  • -Xss 線程的棧內存,默認時1m, 如果項目使用lombok過多的情況下,編譯的時候可能會有棧溢出,就需要配置多一點棧內存。
  • -XX:MaxTeurningThreashold 新生代存活對象晉升到老年代的年齡閾值,對象頭中存儲age用了4個bit,所以其最大值為15。默認值是15,如果年輕代垃圾回收后總有一段時間內存的占用仍然保持在某一個高位,過一段時間恢復正常。那么可以適當降低年齡閾值,讓存活對象更早的進入到老年代,提高年輕代的可用率。

3.使用哪種GC最合適

既然大多數同學都使用Java8,那么一定會在Parallel GC 和G1 GC中選擇了。

關于那種GC最合適,我們下面分別來看看。

3.1 如果選擇ParallelGC

ParallelGC是Java8的默認GC算法,對于新生代其使用Parallel Scavenge (復制算法),老年代垃圾回收則不同。

有兩種組合:

  • 使用 -XX:UseParallelGC 參數,新生代使用 Parallel Scavenge 垃圾回收算法 ,老年代使用PSMarkSweep(Serial Old)垃圾回收算法(標記-整理算法)。
  • 使用 -XX:UseParallelOldGC 參數, 新生代使用 Parallel Scavenge 垃圾回收算法,老年代使用Parallel Old垃圾回收算法(標記整理算法)。
3.1.1 Parallel Scavenge

Parallel Scavenge 是新生代并行回收器,使用復制算法。主要關注的是吞吐量,吞吐量就是JVM運行期間非垃圾回收用時百分比。

Parallel Scavenge 收集器控制吞吐量有兩個重要參數:

  • 最大停頓時間 -XX:MaxGCPauseMills=100
    其值為大于0的毫秒數,垃圾收集器盡可能保證回收的耗時不超過設定的值,但是并不是越小越好,如果值設置太小,那么GC的頻率會提高,這樣吞吐量就降低了。
  • 控制吞吐量大小 -XX:GCTimeRatio=99
    其值為0-100的整數,表示吞吐量,默認值是99,表示允許1%的垃圾回收時間占比。
  • -XX:UseAdaptiveSizePolicy 自動調節新生代大小比例
    啟用這個參數之后,JVM會根據當前系統運行情況收集監控信息,動態調整新生代的比例等等。如果設置了這個參數之后,就不需要在設置新生代大小,Eden以及 S0/S1的比例等參數。
3.1.2 Parallel Old

Parallel Old 是老年代垃圾回收器,負責Full GC ,是一個并行垃圾回收器,整理老年代的時候,是基于“標記-整理”算法,

Parallel Old算法分為3各部分,

  1. Mark:將老年代的內存,劃分為大小固定的多個連續的Region,標記完存活對象之后,統計每個Region的存活對象數量。Mark階段采用串行標記所有從GC Roots可直達的對象,并行標記所有存活的對象。
  2. Summary:某個Region的密度 = 存活對象的內存大小/Region內存大小,Summary階段會從左向右計算各個Region的密度,然后找到一個平衡點,這個平衡點左側的Region都不會進入下一個回收階段,另外一側的Region則需要進入到下一個階段進行回收。相當于只回收部分Region,Summary階段是串行執行階段。
  3. Compaction:利用Summary階段的統計數據,針對需要整理的部分,采用“整理”算法進行操作
  • -XX:+ScavengeBeforeFullGC ScavengBeforeFullGC 是 Parallel GC中的一個參數,默認開啟。其作用就是在一次FullGC之前先觸發一次Young GC 來清理新生代,以降低Full GC時 STW的耗時,
3.1.3 ParallelGC調優

Parallel GC會盡量去滿足如下目標:(優先級由高到低)

  • 最大停頓時間目標
  • 吞吐量目標
  • 最小移動目標

對ParallelGC的調優,其目標應盡可能避免Full GC, 這就需要優化對象老年化的頻率,

使用ParallelGC時,垃圾收集的資源開銷應小于5%,如果已經減少到1%甚至更少,基本上已經達到極限了。

  • Survivor調優:ParallelGC可以自動調整Survivor空間,大部分的程序使用自動調整可以滿足要求,個別應用在需要的情況下可以關閉自動調整,進行手動調整。

    -Xmn1024m   //新生代大小
    -XX:-UseAdaptiveSizePolicy  //關閉自適應調整
    

    -XX:SurvivorRatio 可以調整新生代中Survivor與Eden區的比例,例如-XX:SurvivorRatio=6表示S(From) : S(To) : Eden = 1: 1: 6 。其默認值為8

    如果發現GC頻率過高,整體新生代又太小,可以增大新生代的大小,從而降低YoungGC的頻率和占用時間。

    可以調小 SurvivorRatio的值,在整個新生代不變的情況下,會增大Survivor區的大小(From和To同時增大)。一般情況下Eden區的大小應該比Survivor大很多,如果大量對象都在一次YoungGC后就會回收清理,那么新生代Eden:From:To 為8:1:1就比較合適。如果說很大部分對象的年齡都超過1,即需要在Survivor的From,To中來回轉換幾次之后才能被回收,那么此時可以適當增大一下Survivor區的空間,并且可以將Survivor的空間使用率增大,避免對象年齡增長過快,從而被移動到老年代,造成FullGC。

-XX:-UseAdaptiveSizePolicy  //需要關閉Survivor自適應
-XX:TargetSurvivorRatio=< n > //Suvivor空間的使用率,默認是50%
-XX:MaxTenuringThreshold=15 //存活對象年齡,默認15,
  • 并行線程的優化

    -XX:ParallelGCThreads= N >
    

    此參數設置年輕代并行收集器的線程數,一般與CPU數量相等,過多的線程數量會影響垃圾回收以及整個程序的性能。

    • 默認情況下,當CPU的數量小于8,其值等于CPU數量
    • CPU數量大于8個,其值等于3+5*CPU數量 / 8
  • 最大停頓時間

    -XX:MaxGCPauseMills=< N > //最大停頓時間,值大于0的毫秒數
    

    垃圾收集器為了將最大停頓時間控制在此參數內,收集器會調整堆的大小和其他的參數。

    對于用戶體驗,停頓越短越好,在服務端,會比較注重高并發和高吞吐量。

  • 控制吞吐量大小

    -XX:GCTimeRatio=99 //吞吐量
    

    其值為0-100的整數,表示吞吐量,默認值是99,表示允許1%的垃圾回收時間占比。暫停時間越長,那么垃圾回收占用的時間比越大,可能會超過前面的設定比例。

3.2 如果選擇G1

Garbage-First 垃圾回收器是服務器類型的垃圾回收器,主要針對大內存多處理器機器。其主要目標也是低暫停時間,高吞吐量,全局標記。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    6890

    瀏覽量

    88826
  • 內存
    +關注

    關注

    8

    文章

    2999

    瀏覽量

    73882
  • JAVA
    +關注

    關注

    19

    文章

    2958

    瀏覽量

    104544
  • JVM
    JVM
    +關注

    關注

    0

    文章

    157

    瀏覽量

    12207
  • JDK
    JDK
    +關注

    關注

    0

    文章

    81

    瀏覽量

    16576
收藏 人收藏

    評論

    相關推薦

    介紹一些比較重要的運放非理想參數

      除了共模放大系數以外,實際的運放還有很多非理想參數,這個小節我們介紹一些比較重要的運放非理想參數,這些非理想參數對運放電路是否能正確工作
    發表于 02-02 13:55 ?1854次閱讀
    介紹<b class='flag-5'>一些</b>比較<b class='flag-5'>重要</b>的運放非理想<b class='flag-5'>參數</b>

    jvm參數配置問題怎么解決

    jvm參數配置問題
    發表于 05-05 17:29

    一些公司晶體管參數大全

    電子發燒友為您提供了一些公司晶體管參數大全,希望對您的工作學習起到定的作用!
    發表于 06-23 09:38 ?4187次閱讀

    STM32片上Flash讀寫一些重要知識

    STM32片上Flash讀寫的一些重要知識
    的頭像 發表于 03-06 14:54 ?1.1w次閱讀

    ARM Linux中一些重要的宏及地址定義

    ARM Linux中一些重要的宏及地址定義
    的頭像 發表于 06-22 17:02 ?2699次閱讀

    GMII to RGMII IP核的一些參數

    大家好!今天給大家介紹下GMII to RGMII IP 核的一些參數的含義。其他IP核參數請看文檔pg160。
    的頭像 發表于 05-25 09:30 ?4124次閱讀
    GMII to RGMII IP核的<b class='flag-5'>一些</b><b class='flag-5'>參數</b>

    垃圾收集器的JVM參數配置

    本篇文章我們就來給大家介紹垃圾收集器的 JVM 參數配置。 JVM參數有很多,其實我們直接使用默認的JVM
    的頭像 發表于 10-09 16:35 ?527次閱讀
    垃圾收集器的<b class='flag-5'>JVM</b><b class='flag-5'>參數</b>配置

    jvm的dump太大了怎么分析

    分析大型JVM dump文件可能會遇到的一些挑戰。首先,JVM dump文件通常非常大,可能幾百MB或幾個GB。這是因為它們包含了JVM的完整內存快照,包括堆和棧的所有對象和線程信息。
    的頭像 發表于 12-05 11:01 ?2459次閱讀

    jvm調優參數

    JVM(Java虛擬機)是Java程序的運行環境,它負責解釋Java字節碼并執行相應的指令。為了提高應用程序的性能和穩定性,我們可以調優JVM參數JVM調優主要涉及到堆內存、垃圾
    的頭像 發表于 12-05 11:29 ?599次閱讀

    jvm參數的設置和jvm調優

    JVM(Java虛擬機)參數的設置和調優對于提高Java應用程序的性能和穩定性非常重要。在本文中,我們將詳細介紹JVM參數的設置和調優方法。
    的頭像 發表于 12-05 11:36 ?1421次閱讀

    jvm調優常用命令

    JVM調優是提升Java應用性能的一個重要方面,通過合理設置JVM參數可以達到優化應用性能、提高系統穩定性的目的。本文將為你詳細介紹JVM調
    的頭像 發表于 12-05 11:43 ?659次閱讀

    jvm調優工具有哪些

    JVM調優是提高Java應用程序性能的重要手段,而JVM調優工具則是輔助開發人員進行調優工作的利器。下面將介紹一些常用的JVM調優工具。 J
    的頭像 發表于 12-05 11:44 ?1028次閱讀

    jvm配置metaspace最大值的參數

    堆內存限制):該參數用于設置JVM堆的最大大小。在JVM啟動時,可以使用以下命令來配置Metaspace的最大大小: java -Xmx ... 其中,``可以是一些表示大小的標記
    的頭像 發表于 12-05 14:21 ?2006次閱讀

    weblogic jvm參數配置

    ,讓我們來了解一些常用的JVM參數: -Xms 和 -Xmx參數:這些參數分別用于設置Java虛擬機的初始堆大小和最大堆大小。-Xms設置初
    的頭像 發表于 12-05 14:31 ?1371次閱讀

    weblogic控制臺配置jvm參數

    將詳細介紹如何在WebLogic控制臺中配置JVM參數,并提供一些常見的配置建議。 首先,我們需要了解JVM參數對應的不同類型。
    的頭像 發表于 12-05 14:48 ?2639次閱讀