亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解JVM中的GC調(diào)優(yōu)

 更新時間:2021年06月03日 09:45:20   作者:flydean  
我們經(jīng)常會聽到甚至需要自己動手去做GC調(diào)優(yōu)。那么GC調(diào)優(yōu)的目的到底是什么呢?讓程序跑得更快?讓GC消耗更少的資源?還是讓程序更加穩(wěn)定?帶著這些疑問來讀一下這篇文章,將會得到一個系統(tǒng)的甚至是不一樣的結(jié)果。

那些GC的默認值

其實GC或者說JVM的參數(shù)非常非常的多,有控制內(nèi)存使用的:

有控制JIT的:

有控制分代比例的,也有控制GC并發(fā)的:

當(dāng)然,大部分的參數(shù)其實并不需要我們自行去調(diào)整,JVM會很好的動態(tài)幫我們設(shè)置這些變量的值。

如果我們不去設(shè)置這些值,那么對GC性能比較有影響的參數(shù)和他們的默認值有哪些呢?

GC的選擇

我們知道JVM中的GC有很多種,不同的GC選擇對java程序的性能影響還是比較大的。

在JDK9之后,G1已經(jīng)是默認的垃圾回收器了。

我們看一下G1的調(diào)優(yōu)參數(shù)。

G1是基于分代技術(shù)的,其實JVM還在開發(fā)一些不再基于分代技術(shù)的GC算法,比如ZGC,我們可以根據(jù)需要來選擇適合我們的GC算法。

GC的最大線程個數(shù)

GC是由專門的GC線程來執(zhí)行的,并不是說GC線程越多越好,這個默認線程的最大值是由heap size和可用的CPU資源動態(tài)決定的。

當(dāng)然你可以使用下面兩個選項來修改GC的線程:

 -XX:ParallelGCThreads=threads 設(shè)置STW的垃圾收集線程數(shù)

 -XX:ConcGCThreads = n 設(shè)置并行標(biāo)記線程的數(shù)量

一般情況下ConcGCThreads可以設(shè)置為ParallelGCThreads的1/4。

初始化heap size

默認情況下加初始化的heap size是物理內(nèi)存的1/64。

你可以使用

 -XX:InitialHeapSize=size

來重新設(shè)置。

最大的heap size

默認情況下最大的heap size是物理內(nèi)存的1/4。

你可以使用:

-XX:MaxHeapSize

來重新設(shè)置。

分層編譯技術(shù)

默認情況下分層編譯技術(shù)是開啟的。你可以使用:

-XX:-TieredCompilation

來關(guān)閉分層編譯。如果啟用了分層編譯,那么可能需要關(guān)注JIT中的C1和C2編譯器帶來的影響。

我們到底要什么

java程序在運行過程中,會發(fā)生很多次GC,那么我們其實是有兩種統(tǒng)計口徑:

1.平均每次GC執(zhí)行導(dǎo)致程序暫停的時間(Maximum Pause-Time Goal)。

2.總的花費在GC上的時間和應(yīng)用執(zhí)行時間的比例(Throughput Goal)。

最大暫停時間

單次GC的暫停時間是一個統(tǒng)計平均值,因為單次GC的時間其實是不可控的,但是取了平均值,GC就可以動態(tài)去調(diào)整heap的大小,或者其他的一些GC參數(shù),從而保證每次GC的時間不會超過這個平均值。

我們可以通過設(shè)置:

-XX:MaxGCPauseMillis=<nnn>

來控制這個值。

不管怎么設(shè)置這個參數(shù),總體需要被GC的對象肯定是固定的,如果單次GC暫停時間比較短,可能會需要減少heap size的大小,那么回收的對象也比較少。這樣就會導(dǎo)致GC的頻率增加。從而導(dǎo)致GC的總時間增加,影響程序的Throughput。

吞吐率

吞吐率是由花費在GC上的時間和應(yīng)用程序上的時間比率來決定的。

我們可以通過設(shè)置:

-XX:GCTimeRatio=nnn

來控制。

如果沒有達到throughput的目標(biāo),那么GC可能會去增加heap size,從而減少GC的執(zhí)行頻率。但是這樣會增加單次的Maximum Pause-Time。

如果throughput和maximum pause-time的參數(shù)同時都設(shè)置的話,JVM會去嘗試去動態(tài)減少heap size的大小,直到其中的一個目標(biāo)不能滿足為止。

相對而言,G1更加偏重于最大暫停時間,而ZGC更加偏重于吞吐率。

以上就是詳解JVM中的GC調(diào)優(yōu)的詳細內(nèi)容,更多關(guān)于JVM中的GC調(diào)優(yōu)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實現(xiàn)從數(shù)據(jù)庫導(dǎo)出大量數(shù)據(jù)記錄并保存到文件的方法

    Java實現(xiàn)從數(shù)據(jù)庫導(dǎo)出大量數(shù)據(jù)記錄并保存到文件的方法

    這篇文章主要介紹了Java實現(xiàn)從數(shù)據(jù)庫導(dǎo)出大量數(shù)據(jù)記錄并保存到文件的方法,涉及Java針對數(shù)據(jù)庫的讀取及文件寫入等操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Java 進階必備之ssm框架全面整合

    Java 進階必備之ssm框架全面整合

    SSM框架是spring MVC ,spring和mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個系統(tǒng)劃分為表現(xiàn)層,controller層,service層,DAO層四層,使用spring MVC負責(zé)請求的轉(zhuǎn)發(fā)和視圖管理,spring實現(xiàn)業(yè)務(wù)對象管理,mybatis作為數(shù)據(jù)對象的持久化引擎
    2021-10-10
  • Springboot如何獲取yml、properties參數(shù)

    Springboot如何獲取yml、properties參數(shù)

    這篇文章主要介紹了Springboot如何獲取yml、properties參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot中實現(xiàn)Redis?Stream隊列的代碼實例

    SpringBoot中實現(xiàn)Redis?Stream隊列的代碼實例

    本文介紹了如何在Spring?Boot中使用Redis?Stream隊列進行消息的生產(chǎn)和消費,涉及到的主要內(nèi)容包括添加Redis依賴、配置RedisTemplate、創(chuàng)建生產(chǎn)者和消費者監(jiān)聽器等,需要的朋友可以參考下
    2024-09-09
  • Java登錄功能實現(xiàn)token生成與驗證

    Java登錄功能實現(xiàn)token生成與驗證

    這篇文章介紹了Java登錄功能實現(xiàn)token生成與驗證,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Spring聲明式事務(wù)配置使用詳解

    Spring聲明式事務(wù)配置使用詳解

    這篇文章主要介紹了在spring注解中,使用聲明式事務(wù),需要用到兩個核心的注解:@Transactional注解和@EnableTransactionManagement注解。將@Transactional注解加在方法上,@EnableTransactionManagement注解加在配置類上
    2022-08-08
  • feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決

    feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決

    這篇文章主要介紹了feign開啟日志Logger.Level?feignLoggerLevel()中Level爆紅的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • jdk自帶定時器使用方法詳解

    jdk自帶定時器使用方法詳解

    這篇文章主要為大家詳細介紹了jdk自帶定時器的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中Socket實現(xiàn)數(shù)據(jù)通信的示例代碼

    Java中Socket實現(xiàn)數(shù)據(jù)通信的示例代碼

    本文主要介紹了Java中Socket實現(xiàn)數(shù)據(jù)通信的示例代碼,Socket可以建立起客戶端和服務(wù)器之間的連接,實現(xiàn)數(shù)據(jù)的傳輸和交互,感興趣的可以了解一下
    2023-09-09
  • 使用mybatis框架連接mysql數(shù)據(jù)庫的超詳細步驟

    使用mybatis框架連接mysql數(shù)據(jù)庫的超詳細步驟

    MyBatis是目前java項目連接數(shù)據(jù)庫的最流行的orm框架了,下面這篇文章主要給大家介紹了關(guān)于使用mybatis框架連接mysql數(shù)據(jù)庫的超詳細步驟,文中通過實例代碼和圖文介紹的非常詳細,需要的朋友可以參考下
    2023-04-04

最新評論