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

java垃圾回收之實現(xiàn)并行GC算法

 更新時間:2022年01月25日 09:27:10   作者:金色夢想  
這篇文章主要為大家介紹了java垃圾回收之實現(xiàn)并行GC算法的詳細(xì)講解,讓我們看看并行垃圾收集器的GC日志長什么樣,?從中我們可以得到哪些有用信息

Parallel GC(并行GC)

并行垃圾收集器這一類組合, 在年輕代使用 標(biāo)記-復(fù)制(mark-copy)算法, 在老年代使用 標(biāo)記-清除-整理(mark-sweep-compact)算法。年輕代和老年代的垃圾回收都會觸發(fā)STW事件,暫停所有的應(yīng)用線程來執(zhí)行垃圾收集。兩者在執(zhí)行 標(biāo)記和 復(fù)制/整理階段時都使用多個線程, 因此得名“(Parallel)”。通過并行執(zhí)行, 使得GC時間大幅減少。

通過命令行參數(shù) -XX:ParallelGCThreads=NNN 來指定 GC 線程數(shù)。 其默認(rèn)值為CPU內(nèi)核數(shù)。

可以通過下面的任意一組命令行參數(shù)來指定并行GC:

java -XX:+UseParallelGC com.mypackages.MyExecutableClass
java -XX:+UseParallelOldGC com.mypackages.MyExecutableClass
java -XX:+UseParallelGC -XX:+UseParallelOldGC com.mypackages.MyExecutableClass

并行垃圾收集器適用于多核服務(wù)器,主要目標(biāo)是增加吞吐量。因為對系統(tǒng)資源的有效使用,能達(dá)到更高的吞吐量:

  • 在GC期間, 所有 CPU 內(nèi)核都在并行清理垃圾, 所以暫停時間更短
  • 在兩次GC周期的間隔期, 沒有GC線程在運(yùn)行,不會消耗任何系統(tǒng)資源

另一方面, 因為此GC的所有階段都不能中斷, 所以并行GC很容易出現(xiàn)長時間的卡頓. 如果延遲是系統(tǒng)的主要目標(biāo), 那么就應(yīng)該選擇其他垃圾收集器組合。

注: 長時間卡頓的意思是,此GC啟動之后,屬于一次性完成所有操作, 于是單次 pause 的時間會較長。

讓我們看看并行垃圾收集器的GC日志長什么樣, 從中我們可以得到哪些有用信息。下面的GC日志中顯示了一次 minor GC 暫停 和一次 major GC 暫停:

1 ****-05-26T14:27:40.915-0200: 116.115: [GC (Allocation Failure) 
2       [PSYoungGen: 2694440K->1305132K(2796544K)] 
3    9556775K->8438926K(11185152K)
4    , 0.2406675 secs] 
5    [Times: user=1.77 sys=0.01, real=0.24 secs]
6  ****-05-26T14:27:41.155-0200: 116.356: [Full GC (Ergonomics) 
7       [PSYoungGen: 1305132K->0K(2796544K)] 
8       [ParOldGen: 7133794K->6597672K(8388608K)] 8438926K->6597672K(11185152K), 
9      [Metaspace: 6745K->6745K(1056768K)]
10    , 0.9158801 secs]
11   [Times: user=4.49 sys=0.64, real=0.92 secs]

Minor GC(小型GC)

第一次GC事件表示發(fā)生在年輕代的垃圾收集:

****-05-26T14:27:40.915-02001: 116.1152: [ GC3 (Allocation Failure4)
[PSYoungGen5: 2694440K->1305132K(2796544K)7] 9556775K->8438926K8
(11185152K)9, 0.2406675 secs10]
[Times: user=1.77 sys=0.01, real=0.24 secs]11

****-05-26T14:27:40.915-0200 – GC事件開始的時間. 其中-0200表示西二時區(qū),而中國所在的東8區(qū)為 +0800。

116.115 – GC事件開始時,相對于JVM啟動時的間隔時間,單位是秒。

GC – 用來區(qū)分 Minor GC 還是 Full GC 的標(biāo)志。GC表明這是一次小型GC(Minor GC)

Allocation Failure – 觸發(fā)垃圾收集的原因。本次GC事件, 是由于年輕代中沒有適當(dāng)?shù)目臻g存放新的數(shù)據(jù)結(jié)構(gòu)引起的。

PSYoungGen – 垃圾收集器的名稱。這個名字表示的是在年輕代中使用的: 并行的 標(biāo)記-復(fù)制(mark-copy), 全線暫停(STW) 垃圾收集器。

2694440K->1305132K – 在垃圾收集之前和之后的年輕代使用量。

(2796544K) – 年輕代的總大小。

9556775K->8438926K – 在垃圾收集之前和之后整個堆內(nèi)存的使用量。

(11185152K) – 可用堆的總大小。

0.2406675 secs – GC事件持續(xù)的時間,以秒為單位。

[Times: user=1.77 sys=0.01, real=0.24 secs] – GC事件的持續(xù)時間, 通過三個部分來衡量:

  • user – 在此次垃圾回收過程中, 由GC線程所消耗的總的CPU時間。
  • sys – GC過程中中操作系統(tǒng)調(diào)用和系統(tǒng)等待事件所消耗的時間。
  • real – 應(yīng)用程序暫停的時間。在 Parallel GC 中, 這個數(shù)字約等于: (user time + system time)/GC線程數(shù)。 這里使用了8個線程。 請注意,總有一定比例的處理過程是不能并行進(jìn)行的。

所以,可以簡單地算出, 在垃圾收集之前, 堆內(nèi)存總使用量為 9,556,775K。 其中年輕代為 2,694,440K。同時算出老年代使用量為 6,862,335K. 在垃圾收集之后, 年輕代使用量減少為 1,389,308K, 但總的堆內(nèi)存使用量只減少了 1,117,849K。這表示有大小為 271,459K 的對象從年輕代提升到老年代。

Full GC(完全GC)

學(xué)習(xí)了并行GC如何清理年輕代之后, 下面介紹清理整個堆內(nèi)存的GC日志以及如何進(jìn)行分析:

****-05-26T14:27:41.155-0200 : 116.356 : [Full GC (Ergonomics)
[PSYoungGen: 1305132K->0K(2796544K)] [ParOldGen :7133794K->6597672K
(8388608K)] 8438926K->6597672K (11185152K),
[Metaspace: 6745K->6745K(1056768K)], 0.9158801 secs,
[Times: user=4.49 sys=0.64, real=0.92 secs]

****-05-26T14:27:41.155-0200 – GC事件開始的時間. 其中-0200表示西二時區(qū),而中國所在的東8區(qū)為 +0800。

116.356 – GC事件開始時,相對于JVM啟動時的間隔時間,單位是秒。 我們可以看到, 此次事件在前一次 MinorGC完成之后立刻就開始了。

Full GC – 用來表示此次是 Full GC 的標(biāo)志。Full GC表明本次清理的是年輕代和老年代。

Ergonomics – 觸發(fā)垃圾收集的原因。Ergonomics 表示JVM內(nèi)部環(huán)境認(rèn)為此時可以進(jìn)行一次垃圾收集。

[PSYoungGen: 1305132K->0K(2796544K)] – 和上面的示例一樣, 清理年輕代的垃圾收集器是名為 “PSYoungGen” 的STW收集器, 采用標(biāo)記-復(fù)制(mark-copy)算法。 年輕代使用量從 1305132K 變?yōu)?nbsp;0, 一般 Full GC 的結(jié)果都是這樣。

ParOldGen – 用于清理老年代空間的垃圾收集器類型。在這里使用的是名為 ParOldGen 的垃圾收集器, 這是一款并行 STW垃圾收集器, 算法為 標(biāo)記-清除-整理(mark-sweep-compact)。

7133794K->6597672K – 在垃圾收集之前和之后老年代內(nèi)存的使用情況。

(8388608K) – 老年代的總空間大小。

8438926K->6597672K – 在垃圾收集之前和之后堆內(nèi)存的使用情況。

(11185152K) – 可用堆內(nèi)存的總?cè)萘俊?/p>

[Metaspace: 6745K->6745K(1056768K)] – 類似的信息,關(guān)于 Metaspace 空間的??梢钥闯? 在GC事件中 Metaspace 里面沒有回收任何對象。

0.9158801 secs – GC事件持續(xù)的時間,以秒為單位。

[Times: user=4.49 sys=0.64, real=0.92 secs] – GC事件的持續(xù)時間, 通過三個部分來衡量:

  • user – 在此次垃圾回收過程中, 由GC線程所消耗的總的CPU時間。
  • sys – GC過程中中操作系統(tǒng)調(diào)用和系統(tǒng)等待事件所消耗的時間。
  • real – 應(yīng)用程序暫停的時間。在 Parallel GC 中, 這個數(shù)字約等于: (user time + system time)/GC線程數(shù)。 這里使用了8個線程。 請注意,總有一定比例的處理過程是不能并行進(jìn)行的。

同樣,和 Minor GC 的區(qū)別是很明顯的 —— 在此次GC事件中, 除了年輕代, 還清理了老年代和 Metaspace. 在GC事件前后的內(nèi)存布局如下圖所示:

以上就是java垃圾回收之實現(xiàn)并行GC算法的詳細(xì)內(nèi)容,更多關(guān)于java垃圾回收并行GC算法的資料請關(guān)注腳本之家其它相關(guān)文章!

原文鏈接:https://plumbr.io/handbook/garbage-collection-algorithms-implementations#parallel-gc

相關(guān)文章

  • 在SpringBoot+MyBatis中優(yōu)雅處理多表數(shù)據(jù)清洗的實現(xiàn)步驟

    在SpringBoot+MyBatis中優(yōu)雅處理多表數(shù)據(jù)清洗的實現(xiàn)步驟

    數(shù)據(jù)清洗是指對數(shù)據(jù)進(jìn)行處理和糾錯,以去除或修復(fù)數(shù)據(jù)集中存在的錯誤、不致、不完整和冗余的數(shù)據(jù),從而使數(shù)據(jù)更加準(zhǔn)確、可靠和有用,本文給大家介紹了在SpringBoot和MyBatis中優(yōu)雅處理多表數(shù)據(jù)清洗的實現(xiàn)步驟,需要的朋友可以參考下
    2025-03-03
  • MyBatis中一級緩存和二級緩存的區(qū)別

    MyBatis中一級緩存和二級緩存的區(qū)別

    MyBatis提供了兩級緩存機(jī)制,一級緩存和二級緩存,本文主要介紹了MyBatis中一級緩存和二級緩存的區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Java struts2請求源碼分析案例詳解

    Java struts2請求源碼分析案例詳解

    這篇文章主要介紹了Java struts2請求源碼分析案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Java util.List如何實現(xiàn)列表分段處理

    Java util.List如何實現(xiàn)列表分段處理

    這篇文章主要介紹了Java util.List如何實現(xiàn)列表分段處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • Java Swing BoxLayout箱式布局的實現(xiàn)代碼

    Java Swing BoxLayout箱式布局的實現(xiàn)代碼

    這篇文章主要介紹了Java Swing BoxLayout箱式布局的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringBoot工程下Lombok的應(yīng)用教程詳解

    SpringBoot工程下Lombok的應(yīng)用教程詳解

    這篇文章主要給大家介紹了關(guān)于SpringBoot工程下Lombok應(yīng)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 在maven工程里運(yùn)行java main方法

    在maven工程里運(yùn)行java main方法

    這篇文章主要介紹了在maven工程里運(yùn)行java main方法,需要的朋友可以參考下
    2014-04-04
  • 在IDEA中創(chuàng)建父工程和子模塊module的方法步驟

    在IDEA中創(chuàng)建父工程和子模塊module的方法步驟

    這篇文章主要介紹了在IDEA中創(chuàng)建父工程和子模塊module的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Java線程公平鎖和非公平鎖的差異講解

    Java線程公平鎖和非公平鎖的差異講解

    今天小編就為大家分享一篇關(guān)于Java線程公平鎖和非公平鎖的差異講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java抽象的本質(zhì)解析

    Java抽象的本質(zhì)解析

    對于面向?qū)ο缶幊虂碚f,抽象是它的一大特征之一,在 Java 中可以通過兩種形式來體現(xiàn)OOP的抽象:接口和抽象類,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)抽象的相關(guān)資料,需要的朋友可以參考下
    2022-03-03

最新評論

秭归县| 鹤岗市| 龙游县| 寻乌县| 乐都县| 杭州市| 高密市| 香河县| 海林市| 博湖县| 桦川县| 巍山| 佛山市| 达拉特旗| 定边县| 张北县| 安达市| 竹山县| 根河市| 武平县| 恩施市| 海盐县| 贵德县| 雷波县| 延边| 安阳县| 遂川县| 渑池县| 潞西市| 赣州市| 上栗县| 克什克腾旗| 仙游县| 贺兰县| 浦东新区| 德格县| 焦作市| 二连浩特市| 大名县| 大埔县| 永丰县|