最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

那些GC的默認(rèn)值

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

有控制JIT的:

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

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

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

GC的選擇

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

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

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

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

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

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

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

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

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

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

初始化heap size

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

你可以使用

 -XX:InitialHeapSize=size

來重新設(shè)置。

最大的heap size

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

你可以使用:

-XX:MaxHeapSize

來重新設(shè)置。

分層編譯技術(shù)

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

-XX:-TieredCompilation

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

我們到底要什么

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

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

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

最大暫停時(shí)間

單次GC的暫停時(shí)間是一個(gè)統(tǒng)計(jì)平均值,因?yàn)閱未蜧C的時(shí)間其實(shí)是不可控的,但是取了平均值,GC就可以動(dòng)態(tài)去調(diào)整heap的大小,或者其他的一些GC參數(shù),從而保證每次GC的時(shí)間不會(huì)超過這個(gè)平均值。

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

-XX:MaxGCPauseMillis=<nnn>

來控制這個(gè)值。

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

吞吐率

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

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

-XX:GCTimeRatio=nnn

來控制。

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

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

相對(duì)而言,G1更加偏重于最大暫停時(shí)間,而ZGC更加偏重于吞吐率。

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

相關(guān)文章

  • JVM的類加載過程以及雙親委派模型詳解

    JVM的類加載過程以及雙親委派模型詳解

    這篇文章主要介紹了JVM的類加載過程以及雙親委派模型詳解,類加載器就是根據(jù)指定全限定名稱將 class 文件加載到 JVM 內(nèi)存,然后再轉(zhuǎn)化為 class 對(duì)象。,需要的朋友可以參考下
    2019-06-06
  • Java8新特性之默認(rèn)方法(default)淺析

    Java8新特性之默認(rèn)方法(default)淺析

    這篇文章主要介紹了Java8新特性之默認(rèn)方法(default)淺析,默認(rèn)方法也稱為虛擬擴(kuò)展方法或防護(hù)方法,可以讓我們修改接口而不破壞原來的實(shí)現(xiàn)類的結(jié)構(gòu),需要的朋友可以參考下
    2014-06-06
  • java文件操作練習(xí)代碼 讀取某個(gè)盤符下的文件

    java文件操作練習(xí)代碼 讀取某個(gè)盤符下的文件

    這篇文章主要介紹了java讀取某個(gè)盤符下的文件示例,代碼中要求的是絕對(duì)路徑,編譯過程中要注意絕對(duì)路徑問題和異常的抓取
    2014-01-01
  • 探討:如何在NDK中呼叫Java的class

    探討:如何在NDK中呼叫Java的class

    本篇文章是對(duì)如何在NDK中呼叫Java的class進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • IDEA中使用Git的圖文教程

    IDEA中使用Git的圖文教程

    本文主要介紹了IDEA中使用Git的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • JDBC Template基本使用方法詳解

    JDBC Template基本使用方法詳解

    這篇文章主要介紹了JDBC Template基本使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • mybatis 中 foreach collection的用法小結(jié)(三種)

    mybatis 中 foreach collection的用法小結(jié)(三種)

    這篇文章主要介紹了mybatis 中 foreach collection的用法小結(jié)(三種),需要的朋友可以參考下
    2017-10-10
  • Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)

    Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Java SPI 機(jī)制知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們可以參考下。
    2020-02-02
  • 查看java對(duì)象所占內(nèi)存大小的方法

    查看java對(duì)象所占內(nèi)存大小的方法

    這篇文章主要為大家介紹了如何查看java對(duì)象所占內(nèi)存大小的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SpringBoot+MybatisPlus實(shí)現(xiàn)sharding-jdbc分庫分表的示例代碼

    SpringBoot+MybatisPlus實(shí)現(xiàn)sharding-jdbc分庫分表的示例代碼

    本文主要介紹了SpringBoot+MybatisPlus實(shí)現(xiàn)sharding-jdbc分庫分表的示例代碼,以分庫,分表,分庫分表三種方式來實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

清远市| 祁连县| 汽车| 宝清县| 株洲市| 灯塔市| 阿荣旗| 包头市| 谷城县| 九台市| 江阴市| 峨边| 同心县| 酉阳| 两当县| 库尔勒市| 天镇县| 达日县| 简阳市| 湖南省| 定远县| 南和县| 辰溪县| 霍邱县| 丁青县| 紫金县| 成安县| 平邑县| 当雄县| 横峰县| 天峻县| 兰西县| 蒲城县| 台东县| 浮山县| 将乐县| 桂林市| 绿春县| 交城县| 讷河市| 阿尔山市|