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

java性能優(yōu)化四種常見垃圾收集器匯總

 更新時間:2022年07月08日 09:39:08   作者:??我犟不過你????  
這篇文章主要介紹了java性能優(yōu)化四種常見垃圾收集器匯總,每種垃圾收集器都有其不同的算法實現(xiàn)和步驟,下面我們簡單描述下我們常見的四種垃圾收集器的算法過程,感興趣的同學(xué)們最好先看下以下的兩篇文章去增加理解

前言

本篇文章我們來具體看看如何選擇合適的垃圾收集器。每種垃圾收集器都有其不同的算法實現(xiàn)和步驟,下面我們簡單描述下我們常見的四種垃圾收集器的算法過程,感興趣的同學(xué)們最好先看下以下的兩篇文章去增加理解。分別介紹了一些垃圾回收的基本概念,和各種垃圾回收器回收的過程,內(nèi)容重復(fù),本章不會在去單獨講解一遍。所以本章做一些歸納總結(jié)。

JVM GC 垃圾收集梳理總結(jié)

學(xué)習(xí)java一定要知道的垃圾收集器

常見的垃圾回收器和算法

相信大家可以通過我提供的另外兩個文章,學(xué)習(xí)到很多的垃圾回收器的相關(guān)知識。而我們真正需要關(guān)注,甚至可能使用到的垃圾收集器就是以下四種:

serial 串行垃圾收集器

如果是在client型的虛擬機或者在單核的服務(wù)器上,這種垃圾回收器將會成為默認(rèn)的垃圾回收器。無論是Minor GC 還是 Full GC ,所有的應(yīng)用線程都會暫停。在老年代當(dāng)中使用的是Serial Old,同樣是單線程的老年代版本。

client型虛擬機,我們前面提到過編譯類型分為client和server,jvm會通過client編譯器(單線程)將代碼編譯成jvm識別的字節(jié)碼。

可以通過如下標(biāo)志表示:

    -XX:+UseSerialGC

Parallel 多線程垃圾收集器

在server型虛擬機或多線程服務(wù)器上,jdk8默認(rèn)使用的垃圾收集器類型。

無論是Minor GC還是Full GC都使用多線程的方式去回收垃圾,這兩種GC都會造成應(yīng)用線程的暫停。但是它具有更多的吞吐量,是對于響應(yīng)時間沒有過多要求情況下,最合適的垃圾回收器。

可以通過如下標(biāo)志查看其狀態(tài):

年輕代:

-XX:+UseParallelGC

老年代:

-XX:+UseParallelOldGC

CMS 收集器

其設(shè)計初衷是為了減少serial和parallel收集器,在回收時造成的長時間的系統(tǒng)卡頓。

它在發(fā)生Minor GC時同樣會暫停所有的應(yīng)用線程,不同之處在于,年輕代使用的不是parallel或者serial,而是使用一款專門適用于CMS的年輕代收集器ParNew

可以通過下面的標(biāo)志查看:

-XX:+UseParNewGC

CMS在發(fā)生Full GC時不再暫停全部應(yīng)用線程,使用多線程的方式,和應(yīng)用線程同時運行,清理不在使用的對象。這事得CMS垃圾收集器的停頓時間得到大大的降低。與Parellel收集器相比,極其明顯。

缺點

  • CMS需要占用較多的CPU資源,確保在應(yīng)用線程運行時,gc線程不斷地掃描堆空間。
  • 不會對內(nèi)存進行壓縮整理,導(dǎo)致內(nèi)存碎片化。

如果沒有足夠的CPU資源,或者內(nèi)存碎片化達到極限,將會退化成serial收集器。

可以通過下面的標(biāo)志查看:

-XX:+UseConcMarkSweepGC

G1 收集器

也可以稱作垃圾優(yōu)先收集器(garbage first)。

設(shè)計初衷是為了盡量減少處理超大堆(4gb)時發(fā)生的卡頓。G1仍然屬于分代收集器,但是不同之處是它是邏輯分代。G1將堆空間劃分成若干個區(qū)域(Region),新生代的垃圾收集依然采用暫停所有應(yīng)用線程的方式,將存活對象拷貝到老年代或者Survivor空間。老年代也分成很多區(qū)域,G1收集器通過將對象從一個區(qū)域復(fù)制到另外一個區(qū)域,完成了清理工作。這樣就解決了CMS中的內(nèi)存碎片問題。

與CMS相同,G1也屬于concurrent收集器,在老年代發(fā)生Full GC時,由后臺線程完成回收工作,不需要暫停應(yīng)用線程。

通過下面的標(biāo)志查看:

-XX:+UseG1GC

其實上面的內(nèi)容都是簡單描述,真正的實現(xiàn)細(xì)節(jié)請看開篇提供的文章。

顯式垃圾收集

這里說的顯式的垃圾收集,其實指的是手動觸發(fā)的垃圾回收,如下所示:

System.gc;

這是一種可以認(rèn)為控制,讓jvm發(fā)生強制gc的方式。無論什么時候,都是不建議使用這種方式進行垃圾回收。

當(dāng)你使用這條指定,不論是何種垃圾收集器,哪怕是CMS或G1也會發(fā)生Full GC,同時停止全部的應(yīng)用線程,會卡頓相當(dāng)長的一段時間。

例外情況:

  • 性能分析、測試
  • 堆分析

在上述情況,調(diào)用System.gc將能更好的幫助我們分析當(dāng)前應(yīng)用存在的問題。

到此這篇關(guān)于java性能優(yōu)化四種常見垃圾收集器匯總的文章就介紹到這了,更多相關(guān)java垃圾收集器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mapper層繼承BaseMapper<T>需要引入的pom依賴方式

    Mapper層繼承BaseMapper<T>需要引入的pom依賴方式

    這篇文章主要介紹了Mapper層繼承BaseMapper<T>需要引入的pom依賴方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JAVA得到數(shù)組中最大值和最小值的簡單實例

    JAVA得到數(shù)組中最大值和最小值的簡單實例

    這篇文章主要介紹了JAVA得到數(shù)組中最大值和最小值的簡單實例,需要的朋友可以參考下
    2014-08-08
  • 使用springboot配置和占位符獲取配置文件中的值

    使用springboot配置和占位符獲取配置文件中的值

    這篇文章主要介紹了使用springboot配置和占位符獲取配置文件中的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java兩大工具庫Commons和Guava使用示例詳解

    Java兩大工具庫Commons和Guava使用示例詳解

    這篇文章主要為大家介紹了Java兩大工具庫Commons和Guava使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • java 實現(xiàn) stack詳解及實例代碼

    java 實現(xiàn) stack詳解及實例代碼

    這篇文章主要介紹了java 實現(xiàn) stack詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • springmvc+kindeditor文件上傳實例詳解

    springmvc+kindeditor文件上傳實例詳解

    這篇文章主要為大家詳細(xì)介紹了springmvc+kindeditor文件上傳實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Java替換字符串replace和replaceAll方法舉例詳解

    Java替換字符串replace和replaceAll方法舉例詳解

    這篇文章主要介紹了Java中替換字符串的幾種方法,包括String類的replace()、replaceAll()、replaceFirst()方法,以及StringBuilder和StringBuffer類的replace()方法,還提到了一些第三方庫,如Hutool,它們提供了更豐富的字符串處理功能,需要的朋友可以參考下
    2025-02-02
  • springboot配置文件中使用${}注入值的兩種方式小結(jié)

    springboot配置文件中使用${}注入值的兩種方式小結(jié)

    這篇文章主要介紹了springboot配置文件中使用${}注入值的兩種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 如何在springboot中配置和使用mybatis-plus

    如何在springboot中配置和使用mybatis-plus

    這篇文章主要給大家介紹了關(guān)于如何在springboot中配置和使用mybatis-plus的相關(guān)資料,MyBatis?Plus是MyBatis的增強版,旨在提供更多便捷的特性,減少開發(fā)工作,同時保留了MyBatis的靈活性和強大性能,需要的朋友可以參考下
    2023-11-11
  • springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn)

    springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn)

    這篇文章主要介紹了springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評論

金塔县| 赤水市| 洪雅县| 始兴县| 兴国县| 商都县| 保靖县| 凉山| 调兵山市| 岑溪市| 石嘴山市| 象山县| 宜城市| 垫江县| 陕西省| 北流市| 抚顺县| 巴林右旗| 饶河县| 商都县| 海南省| 耒阳市| 潮安县| 湘乡市| 侯马市| 儋州市| 河北区| 和静县| 曲靖市| 湘潭县| 泾川县| 福清市| 霸州市| 靖边县| 民权县| 修水县| 左权县| 萨嘎县| 乐清市| 阳山县| 申扎县|