日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
常見(jiàn)的垃圾回收器你知道有哪些嗎?

本文轉(zhuǎn)載自微信公眾號(hào)「Java極客技術(shù)」,作者鴨血粉絲。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java極客技術(shù)公眾號(hào)。   

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

作為一個(gè) Java 開(kāi)發(fā),在面試的過(guò)程中垃圾回收器是經(jīng)常會(huì)被問(wèn)到的一個(gè)問(wèn)題,隨著 Java 的發(fā)展,垃圾回收器也經(jīng)歷了很多的發(fā)展。大家熟知的垃圾回收器主要有下面幾種。

  1. Serial 單線(xiàn)程新生代復(fù)制算法的垃圾回收器;
  2. SerialOld 垃圾回收器,是一種單線(xiàn)程老年代標(biāo)記整理算法;
  3. ParNew 垃圾回收器,是 Serial 的多線(xiàn)程實(shí)現(xiàn),采用復(fù)制算法實(shí)現(xiàn);
  4. Parallel Scavenge 垃圾回收器,是一種高效的多線(xiàn)程復(fù)制算法;
  5. ParallelOld 垃圾回收器,是 Parallel Scavenge 的一種老年代的多線(xiàn)程標(biāo)記整理算法;
  6. CMS 垃圾回收器,是一種多線(xiàn)程標(biāo)記清除算法,后面會(huì)詳細(xì)介紹;
  7. G1 垃圾回收器,是一種高吞吐量的垃圾回收器。

回收算法

在介紹垃圾回收器之前,我們先了解一下垃圾回收器背后的算法,每個(gè)垃圾回收器都是具體算法的實(shí)現(xiàn),不同的垃圾回收器只是背后的算法不同而已,下面就先簡(jiǎn)單介紹下具體的算法。

標(biāo)記清除

標(biāo)記清除算法是一種先標(biāo)記,后清除的算法,在第一次掃描的時(shí)候先標(biāo)記出所有需要清理的內(nèi)存,將所有需要回收的內(nèi)存都標(biāo)記過(guò)后,一次性清理掉。這種算法簡(jiǎn)單但是效率低,而且內(nèi)存碎片化嚴(yán)重。內(nèi)存一旦碎片化嚴(yán)重的話(huà),就會(huì)浪費(fèi)內(nèi)存,無(wú)法分配較大的對(duì)象。

復(fù)制算法

復(fù)制算法的實(shí)現(xiàn)方式比較簡(jiǎn)潔明了,就是霸道的把內(nèi)存分成兩部分,在平時(shí)使用的時(shí)候只用其中的固定一份,在當(dāng)需要進(jìn)行 GC 的時(shí)候,把存活的對(duì)象復(fù)制到另一部分中,然后將已經(jīng)使用的內(nèi)存全部清理掉。這種算法可以解決碎片化的問(wèn)題,但是缺點(diǎn)也很明顯,就是浪費(fèi)內(nèi)存,有一半的內(nèi)存都不能使用。

標(biāo)記整理算法

既然標(biāo)記清除和復(fù)制算法各有優(yōu)缺點(diǎn),那自然的我們就想到是否可以把這兩種算法結(jié)合起來(lái),于是就出現(xiàn)了標(biāo)記整理算法。標(biāo)記階段是標(biāo)記清除算法一樣,先標(biāo)記出需要回收的部分,不過(guò)清除階段不是直接清除,而是把存活的對(duì)象往內(nèi)存的一端進(jìn)行移動(dòng),然后清除剩下的部分。

標(biāo)記整理的算法雖然可以解決上面兩個(gè)算法的一些問(wèn)題,但是還是需要先進(jìn)行標(biāo)記,然后進(jìn)行移動(dòng),整個(gè)效率還是偏低的。

分代回收算法

分代回收算法是目前使用較多的一種算法,這個(gè)不是一個(gè)新的算法,只是將內(nèi)存進(jìn)行的劃分,不同區(qū)域的內(nèi)存使用不同的算法。根據(jù)對(duì)象的存活時(shí)間將內(nèi)存的劃分為新生代和老年代,其中新生代包含 Eden 區(qū)和 S0,S1。在新生代中使用是復(fù)制算法,在進(jìn)行對(duì)象內(nèi)存分配的時(shí)候只會(huì)使用 Eden 和 S0 區(qū),當(dāng)發(fā)生 GC 的時(shí)候,會(huì)將存活的對(duì)象復(fù)制到 S1 區(qū),然后循環(huán)往復(fù)進(jìn)行復(fù)制。當(dāng)某個(gè)對(duì)象在進(jìn)行了 15 次GC 后依舊存活,那這個(gè)對(duì)象就會(huì)進(jìn)入老年代。老年代因?yàn)槊看位厥盏膶?duì)象都會(huì)比較少,因此使用的是標(biāo)記整理算法。

垃圾回收器

上面雖然提到了好幾個(gè)垃圾回收器,但是目前主流的垃圾回收器只有 CMS 和 G1。下面就跟大家聊下這兩個(gè)垃圾回收器。

CMS 垃圾回收器

CMS 全稱(chēng) Concurrent Mark Sweep 并發(fā)標(biāo)記清除垃圾回收器。CMS 是一種以獲取最短停頓時(shí)間為目的的垃圾回收器。提到停頓時(shí)間,我們都知道任何垃圾回收器在進(jìn)行工作的時(shí)候都會(huì)出現(xiàn) STW,Stop the World 停止用戶(hù)進(jìn)程,這對(duì)業(yè)務(wù)來(lái)說(shuō)只很難接受的,但是現(xiàn)在市面上所有的垃圾回收器都無(wú)法避免這個(gè)問(wèn)題,只能最大化的去優(yōu)化,從而降低停頓的時(shí)間。

CMS 雖然被稱(chēng)為是并發(fā)的垃圾回收器,但是也并不是完全并發(fā)的,從名字上我們可以看到是采用標(biāo)記-清除算法來(lái)實(shí)現(xiàn)的,整個(gè)實(shí)現(xiàn)過(guò)程分為五個(gè)步驟:

  1. 初始標(biāo)記:暫停所有線(xiàn)程,從來(lái)可達(dá)性分析來(lái)標(biāo)記對(duì)象,這也是 CMS 垃圾回收器第一個(gè) STW 的時(shí)候;
  2. 并發(fā)標(biāo)記:并發(fā)標(biāo)記的時(shí)候 GC 線(xiàn)程和用戶(hù)線(xiàn)程是同時(shí)存在的,這個(gè)過(guò)程中會(huì)記錄所有可達(dá)的對(duì)象,但是這個(gè)過(guò)程結(jié)束過(guò)后由于用戶(hù)線(xiàn)程一直在運(yùn)行所以還會(huì)產(chǎn)生新的引用更新,也就是需要下一步了;
  3. 并發(fā)預(yù)清理:這個(gè)階段用戶(hù)線(xiàn)程和 GC 線(xiàn)程同時(shí)運(yùn)行,GC 線(xiàn)程會(huì)進(jìn)行一下預(yù)清理的動(dòng)作;
  4. 重新標(biāo)記:重新標(biāo)記這個(gè)階段會(huì)暫停用戶(hù)線(xiàn)程,將上一步并發(fā)標(biāo)記過(guò)程中用戶(hù)線(xiàn)程引起的更新進(jìn)行修正,這個(gè)時(shí)間會(huì)比初始標(biāo)記時(shí)間長(zhǎng),但是會(huì)比并發(fā)標(biāo)記時(shí)間短一點(diǎn);
  5. 并發(fā)清除:在所有需要清理的對(duì)象都被標(biāo)記完過(guò)后就會(huì)執(zhí)行最后一步清理的動(dòng)作。清理的時(shí)候用戶(hù)線(xiàn)程是可以繼續(xù)運(yùn)行的,GC 線(xiàn)程只清理標(biāo)記的區(qū)域。

G1 垃圾回收器

G1 全稱(chēng) Garbage-First 是一種面向服務(wù)器的垃圾回收器,通過(guò)將堆內(nèi)存劃分為多個(gè) Region 來(lái)實(shí)現(xiàn)可預(yù)測(cè)的停頓時(shí)間模型。在 G1 當(dāng)中,新生代和老年代已經(jīng)不再是物理隔離,而都是被劃分一個(gè)個(gè) Region 區(qū)域。正是由于這種可預(yù)測(cè)的時(shí)間停頓模型讓 G1 成為了一個(gè)高吞吐量的垃圾回收器。G1 能充分利用 CPU,多核環(huán)境下可以縮短 STW 的時(shí)間。

G1 垃圾回收器的整個(gè)實(shí)現(xiàn)過(guò)程分為四個(gè)步驟:

  1. 初始標(biāo)記:通過(guò)可達(dá)性分析標(biāo)記 GC Roots 的直接關(guān)聯(lián)對(duì)象,這個(gè)階段與 CMS 一樣需要 STW;
  2. 并發(fā)標(biāo)記:并發(fā)標(biāo)記是通過(guò) GC Roots 找到存活的對(duì)象,這個(gè)階段 GC 線(xiàn)程是與用戶(hù)線(xiàn)程同時(shí)運(yùn)行的,并且這個(gè)階段的時(shí)間比初始標(biāo)記長(zhǎng);
  3. 最終標(biāo)記:最終標(biāo)記跟 CMS 的重新標(biāo)記一樣,也是為了修正并發(fā)標(biāo)記過(guò)程中因用戶(hù)線(xiàn)程繼續(xù)運(yùn)行而導(dǎo)致產(chǎn)生新的引用更新;同樣的這里也需要 STW;
  4. 篩選回收:篩選回收這里會(huì)對(duì)每個(gè) Region 的回收成本進(jìn)行排序,根據(jù)用戶(hù)期望的停頓時(shí)間來(lái)制定收回計(jì)劃,這也就是可預(yù)測(cè)的停頓時(shí)間模型的體現(xiàn)之處,這個(gè)階段 GC 線(xiàn)程是與用戶(hù)線(xiàn)程同時(shí)運(yùn)行的。

總結(jié)

雖然說(shuō) Java 開(kāi)發(fā)不用程序員去手動(dòng)創(chuàng)建和回收內(nèi)存,但是了解和掌握垃圾回收器是每個(gè) Java 程序員必須要掌握的,不僅僅是面試的過(guò)程中會(huì)被問(wèn)到,對(duì)自己的職業(yè)發(fā)展也是很有幫助的。本文是阿粉自己學(xué)習(xí)和整理的,部分資料參考網(wǎng)絡(luò)上,分享給大家,幫助大家一起成長(zhǎng)。


本文名稱(chēng):常見(jiàn)的垃圾回收器你知道有哪些嗎?
分享路徑:http://www.dlmjj.cn/article/cdggipe.html