欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

一文讀懂JVM中的垃圾回收器-創(chuàng)新互聯(lián)

這篇文章給大家介紹一文讀懂JVM中的垃圾回收器,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

在順昌等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站 網(wǎng)站設(shè)計制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,成都全網(wǎng)營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),順昌網(wǎng)站建設(shè)費用合理。

JVM的GC經(jīng)過多年的發(fā)展,大家對Minor GC、major GC的理解并不完全一致,所以我不打算在本文中使用這個概念。我把GC大概分為一下4類:

  • Young GC:只是負(fù)責(zé)回收年輕代對象的GC;
  • Old GC:只是負(fù)責(zé)回收老年代對象的GC;
  • Full GC:回收整個堆的對象,包括年輕代、老年代、持久帶;
  • Mixed GC:回收年輕代和部分老年代的GC (G1);

因為筆者目前使用G1還是比較少的,所以本文不打算將G1。

垃圾回收器算法

目前主流垃圾回收器都采用的是可達(dá)性分析算法來判斷對象是否已經(jīng)存活,不使用引用計數(shù)算法判斷對象時候存活的原因在于該算法很難解決相互引用的問題。

標(biāo)記-清除算法(Mark-Sweep)


標(biāo)記-清除算法由標(biāo)記階段和清除階段構(gòu)成。標(biāo)記階段是把所有活著的對象都做上標(biāo)記的階段;清除階段是把那些沒有標(biāo)記的對象,也就是非活動對象回收的階段。通過這兩個階段,就可以令不能利用的內(nèi)存空間重新得到利用。

從標(biāo)記-清除算法我們可以看出,該算法不涉及對象移動,但是可能會產(chǎn)生內(nèi)存碎片化問題。空間碎片太高可能會導(dǎo)致程序運行時需要分配較大內(nèi)存時候,無法找到足夠的連續(xù)內(nèi)存,需要其他垃圾回收幫助回收內(nèi)存。

復(fù)制算法(Copying)

復(fù)制算法內(nèi)存空間分為兩塊區(qū)域:From、to,每次只使用其中一塊,在垃圾回收時將正在使用的內(nèi)存中的存活對象復(fù)制到未被使用的內(nèi)存塊中,之后,清除正在使用的內(nèi)存塊中的所有對象,交換兩個內(nèi)存的角色,完成垃圾回收。

上面那種復(fù)制算法有一半的空間是浪費的。所以在Java新生代把內(nèi)存區(qū)域分為Eden空間、from、to空間3個部分,from和to空間也稱為survivor 空間,用于存放未被回收的對象。對象開始都是Eden生成;當(dāng)回收時,將Eden和from中存活的對象移動到to區(qū)域中。

復(fù)制算法存在空間浪費的情況,始終都要保持一個Survivor是空閑的,并且在GC的時候要是存活對象大小超過了Survivor中的大小,就需要另外的策略存儲存活對象。

目前open JDK新生代回收策略就是采用的復(fù)制算法,其中Eden和Survivor的默認(rèn)配置為8:1

標(biāo)記-壓縮算法(Mark-Compact)

標(biāo)記-壓縮算法由標(biāo)記階段和壓縮階段構(gòu)成。標(biāo)記階段標(biāo)記-清除算法中的標(biāo)記階段完全一樣,壓縮階段是讓所有存活的對象向一端移動。這樣空閑內(nèi)存都在另外一端,屬于連續(xù)空間,不存在內(nèi)存碎片化問題,但是會產(chǎn)生對象移動。

分代算法(Generational GC)

根據(jù)對象的不同生命周期分別管理, JVM 中將對象分為我們熟悉的新生代、老年代和永久代分別管理。這樣做的好處就是可以根據(jù)不同類型對象進(jìn)行不同策略的管理,例如新生代中對象更新速度快,就會使用效率較高的復(fù)制算法。老年代中內(nèi)存空間相對分配較大,而且時效性不如新生代強,就會常常使用Mark-Sweep-Compact (標(biāo)記-清除-壓縮)算法。

各種算法性能比較

一文讀懂JVM中的垃圾回收器

常見的垃圾回收器


垃圾回收器分類

總體上可以把Java的垃圾回收器分為3類:

  • 串行垃圾回收器(Serial Garbage Collector)
  • 并行垃圾回收器(Parallel Garbage Collector)
  • 并發(fā)標(biāo)記掃描垃圾回收器(CMS Garbage Collector)

Java垃圾回收器主要有6種,各自優(yōu)缺點以及組合關(guān)系如下:

一文讀懂JVM中的垃圾回收器

其中的連線表示young gc和old gc可以搭配使用

一文讀懂JVM中的垃圾回收器

垃圾回收器選擇策略:


  • 客戶端程序:Serial + Serial Old;
  • 吞吐率優(yōu)先的服務(wù)端程序(比如:計算密集型):Parallel Scavenge + Parallel Old;
  • 響應(yīng)時間優(yōu)先的服務(wù)端程序:ParNew + CMS。

目前很大一部分的Java應(yīng)用都集中在互聯(lián)網(wǎng)的服務(wù)器端,這類應(yīng)用尤其關(guān)系服務(wù)的響應(yīng)時間,希望應(yīng)用暫停時間更短,所以基本上使用的都是ParNew + CMS,這也是我司默認(rèn)使用的配置。

CMS垃圾回收器

在啟動JVM參數(shù)加上 -XX:+UseConcMarkSweepGC ,這個參數(shù)表示對于老年代的回收采用 CMS。

CMS執(zhí)行過程

CMS 的回收過程主要分為下面的幾個步驟:

  • 初始標(biāo)記(Initial Mark)
  • 并發(fā)標(biāo)記(Concurrent marking)
  • 并發(fā)預(yù)清理(Concurrent pre-preclean)
  • 重新標(biāo)記(Final Remark)
  • 并發(fā)清理(Concurrent sweep)
  • 并發(fā)重置(Concurrent reset)

一文讀懂JVM中的垃圾回收器

 CMS日志解析


標(biāo)準(zhǔn)的CMS日志如下:

2018-11-10T18:23:27.531+0800: 1495270.652: [GC (CMS Initial Mark) [1 CMS-initial-mark: 2008820K(2510848K)] 2038212K(4398336K), 0.0231086 secs] [Times: user=0.01 sys=0.00, real=0.03 secs] 

2018-11-10T18:23:27.554+0800: 1495270.675: [CMS-concurrent-mark-start]

2018-11-10T18:23:27.644+0800: 1495270.765: [CMS-concurrent-mark: 0.090/0.090 secs] [Times: user=0.34 sys=0.03, real=0.09 secs] 

2018-11-10T18:23:27.644+0800: 1495270.765: [CMS-concurrent-preclean-start]

2018-11-10T18:23:27.654+0800: 1495270.775: [CMS-concurrent-preclean: 0.010/0.010 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 

2018-11-10T18:23:27.655+0800: 1495270.775: [CMS-concurrent-abortable-preclean-start]

2018-11-10T18:23:32.305+0800: 1495275.425: [CMS-concurrent-abortable-preclean: 4.623/4.650 secs] [Times: user=7.01 sys=1.01, real=4.65 secs] 

2018-11-10T18:23:32.307+0800: 1495275.427: [GC (CMS Final Remark) [YG occupancy: 847369 K (1887488 K)]1495275.427: [Rescan (parallel) , 0.0902177 secs]1495275.518: [weak refs processing, 0.0514433 secs]1495275.569: [class unloading, 0.0256119 secs]1495275.595: [scrub symbol table, 0.0074695 secs]1495275.602: [scrub string table, 0.0015014 secs][1 CMS-remark: 2008820K(2510848K)] 2856190K(4398336K), 0.1806988 secs] [Times: user=0.68 sys=0.00, real=0.18 secs] 

2018-11-10T18:23:32.488+0800: 1495275.609: [CMS-concurrent-sweep-start]

2018-11-10T18:23:33.660+0800: 1495276.781: [CMS-concurrent-sweep: 1.172/1.172 secs] [Times: user=1.89 sys=0.24, real=1.17 secs] 

2018-11-10T18:23:33.661+0800: 1495276.782: [CMS-concurrent-reset-start]

2018-11-10T18:23:33.667+0800: 1495276.788: [CMS-concurrent-reset: 0.006/0.006 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

新聞名稱:一文讀懂JVM中的垃圾回收器-創(chuàng)新互聯(lián)
URL鏈接:http://www.chinadenli.net/article42/dhddec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google定制網(wǎng)站網(wǎng)站設(shè)計網(wǎng)站排名建站公司網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)