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

java性能優(yōu)化之分代回收

 更新時(shí)間:2022年07月08日 08:35:11   作者:??我犟不過你????  
這篇文章主要介紹了java性能優(yōu)化之分代回收,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

我們今天一起來聊一聊關(guān)于垃圾收集的細(xì)節(jié)問題。垃圾收集是通過何種方式減少stop the world?這將是垃圾回收的重點(diǎn)內(nèi)容。

什么是分代回收?

什么是分代回收,初次接觸的同學(xué)肯定是很懵的。還記得我們前面在介紹使用jvisualvm工具的時(shí)候,從它給我們反饋的視圖上看到,有幾個(gè)不同的數(shù)據(jù)塊,且是動(dòng)態(tài)的,如下圖紅圈的部分:

從左到右分別是:

  • Metaspace :元空間
  • Old :老年代
  • Eden + S0 + S1 : 這三個(gè)加在一起稱為年輕代

到目前為止,市面上常見的垃圾收集器,都是按照這種分代回收的方式進(jìn)行垃圾回收的,但是其內(nèi)部的實(shí)現(xiàn)方式卻有很大的差別。

本章我們的重點(diǎn)是 老年代 和 年輕代 。

通過上圖我們發(fā)現(xiàn),年輕代有三部分組成:

  • Eden :通常稱為Eden區(qū),翻譯過來也可以稱為伊甸園區(qū)。
  • S0 和 S1:通常稱為survivor區(qū),翻譯過來稱為幸存者區(qū),由幸存者0和幸存者1所組成。

為什么采用分代回收?

絕大部分的對(duì)象,它們的生命周期非常短暫,甚至絕大多數(shù)都是臨時(shí)對(duì)象,垃圾收集器的設(shè)計(jì)需要適應(yīng)這種情況。

我們都知道對(duì)象創(chuàng)建,存放在堆中,而不論是老年代還是年輕代都是堆中的一部分。

年輕代回收

當(dāng)對(duì)象被創(chuàng)建后,會(huì)被分配至年輕代,隨著對(duì)象的增加,年輕代會(huì)被占滿,此時(shí)將會(huì)停止全部的應(yīng)用線程,并進(jìn)行垃圾回收,沒有被使用的對(duì)象會(huì)被回收,仍然被使用的對(duì)象將會(huì)被移動(dòng)到其他的地方。這種操作就是MinorGC,年輕代回收。

使用分代算法的最根本原因,是為了盡量的減少垃圾回收造成的停頓,我們可以從下面兩個(gè)方面考慮:

  • 新生代是堆的一部分,僅處理一部分空間,一定比整個(gè)堆空間的時(shí)間要短,停頓時(shí)間也就短。但是我們一定會(huì)想到,停頓的頻率增加了。
  • 年輕代的空間分配方式,對(duì)性能有影響。年輕代中,eden占據(jù)大部分空間,而S0和S1平分剩余空間。對(duì)象首次創(chuàng)建會(huì)在Eden中,經(jīng)過一次垃圾回收時(shí),Eden被清空,未使用的對(duì)象被回收,仍然使用的對(duì)象進(jìn)入Survior或老年代。Eden區(qū)的清空操作,相當(dāng)于進(jìn)行了一次壓縮整理。

即使是年輕代的回收,仍然存在時(shí)空停頓。

老年代回收

前面提到,除了在Eden可能將對(duì)象移動(dòng)到老年代當(dāng)中,對(duì)于在Survior當(dāng)中沒有被回收的對(duì)象,最終也會(huì)移動(dòng)到老年代當(dāng)中。當(dāng)老年代被占滿時(shí),會(huì)停止所有的應(yīng)用線程,找到不再使用的對(duì)象進(jìn)行垃圾回收。這個(gè)過程將會(huì)停頓很長時(shí)間,我們稱之為Full GC。

更加厲害的回收方式

前面的描述其實(shí)都是較為簡單的垃圾收集器,在停止應(yīng)用線程后去發(fā)現(xiàn)不再使用的對(duì)象,進(jìn)行回收。

然而實(shí)際上,通過一些定制,和復(fù)雜的計(jì)算,我們可以在應(yīng)用線程運(yùn)行時(shí)去找到不再使用的對(duì)象。在前一篇文章一筆帶過的CMS和G1收集器,就是如此。他們不需要停止應(yīng)用線程就可以找到不再使用的對(duì)象,所以它們也叫做concurrent垃圾收集器

垃圾在查找的時(shí)候?qū)?huì)占用很多時(shí)間,當(dāng)然查找算法將是下一章節(jié)我們需要學(xué)習(xí)的內(nèi)容。然而concurrent垃圾收集器可以盡可能的減少應(yīng)用的停頓時(shí)間,它們也可以稱為低停頓收集器。

這種垃圾收集器縮減應(yīng)用的停頓時(shí)間,其代價(jià)是占用更多的CPU。即使是G1和CMS也會(huì)遇到長時(shí)間的Full GC,這將是我們需要針對(duì)實(shí)際環(huán)境調(diào)優(yōu)的方向。

垃圾收集器的權(quán)衡

前面簡單描述了不同垃圾收集器的垃圾收集方式,以及造成的影響。但是在我們選擇垃圾收集器的過程中還是需要一定的權(quán)衡,才能使其發(fā)揮最佳的性能。

我們需要考慮的重點(diǎn)就是:

  • 吞吐量:如果你的系統(tǒng)需要大批量的處理數(shù)據(jù)等,換句話說,不要求每次響應(yīng)時(shí)間最快,而平均響應(yīng)時(shí)間更加重要,Parallel收集器也許會(huì)有不錯(cuò)的表現(xiàn)。
  • 響應(yīng)時(shí)間:簡單來說,如果你想要你的接口獲得更快的響應(yīng)時(shí)間,那么concurrent收集器將是更好的選擇。
  • CPU性能:使用current收集器勢必要消耗更多的CPU資源。

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

相關(guān)文章

  • Spring AOP實(shí)現(xiàn)Redis緩存數(shù)據(jù)庫查詢源碼

    Spring AOP實(shí)現(xiàn)Redis緩存數(shù)據(jù)庫查詢源碼

    這篇文章主要介紹了Spring AOP實(shí)現(xiàn)Redis緩存數(shù)據(jù)庫查詢的相關(guān)內(nèi)容,源碼部分還是不錯(cuò)的,需要的朋友可以參考下。
    2017-09-09
  • servlet之web路徑問題_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    servlet之web路徑問題_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了servlet之web路徑問題的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • rabbitmq使用springboot實(shí)現(xiàn)direct模式(最新推薦)

    rabbitmq使用springboot實(shí)現(xiàn)direct模式(最新推薦)

    這篇文章主要介紹了rabbitmq使用springboot實(shí)現(xiàn)direct模式,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • JDBC Template基本使用方法詳解

    JDBC Template基本使用方法詳解

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

    Java中的JWT使用詳解

    這篇文章主要介紹了Java中的JWT使用詳解,JWT是一個(gè)開放標(biāo)準(zhǔn)(rfc7519),它定義了一種緊湊的、自包含的方式,用于在各方之間以JSON對(duì)象安全地傳輸信息,需要的朋友可以參考下
    2023-08-08
  • SpringBoot中定義Bean的方法總結(jié)

    SpringBoot中定義Bean的方法總結(jié)

    在Spring Boot應(yīng)用程序中,定義Bean是非常常見的操作,它是構(gòu)建應(yīng)用程序的基礎(chǔ),pring Boot提供了多種方式來定義Bean,每種方式都有其適用的場景和優(yōu)勢,本文將介紹Spring Boot中定義Bean的幾種常見方式,需要的朋友可以參考下
    2023-12-12
  • Mybatis自關(guān)聯(lián)查詢一對(duì)多查詢的實(shí)現(xiàn)示例

    Mybatis自關(guān)聯(lián)查詢一對(duì)多查詢的實(shí)現(xiàn)示例

    這篇文章主要介紹了Mybatis自關(guān)聯(lián)查詢一對(duì)多查詢的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • springboot多文件上傳實(shí)現(xiàn)使用postman測試多文件上傳接口

    springboot多文件上傳實(shí)現(xiàn)使用postman測試多文件上傳接口

    這篇文章主要介紹了springboot多文件上傳實(shí)現(xiàn)使用postman測試多文件上傳接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot項(xiàng)目使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的案例代碼

    springboot項(xiàng)目使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的案例代碼

    這篇文章主要介紹了springboot項(xiàng)目使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • JCrontab簡單入門實(shí)例詳解

    JCrontab簡單入門實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了JCrontab簡單入門實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評(píng)論

临高县| 清原| 古交市| 郸城县| 桂平市| 南城县| 沁源县| 巩义市| 德惠市| 西丰县| 监利县| 蒙自县| 金溪县| 江山市| 磐安县| 阿坝| 东海县| 台北县| 林西县| 始兴县| 油尖旺区| 青冈县| 同江市| 丰原市| 财经| 前郭尔| 通山县| 弋阳县| 清苑县| 邯郸县| 天门市| 西藏| 囊谦县| 梓潼县| 通山县| 兴仁县| 泌阳县| 大邑县| 洛川县| 鄂州市| 新宁县|