<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    @hunter129

    天天學(xué)習(xí),好好向上!

       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      21 隨筆 :: 5 文章 :: 37 評論 :: 0 Trackbacks
    本系列文章由作者@hunter129 翻譯,轉(zhuǎn)載請注明出處。

    第三章包括5個小部分,1.垃圾收集的基本概念,2.優(yōu)秀垃圾收集器的特征,3.收集器的設(shè)計(jì)選擇,4.性能度量指標(biāo),5.分代收集的基本原理。
    內(nèi)容比較長,我會分成2篇帖子發(fā),本章的內(nèi)容是通用的,也就說這些內(nèi)容同樣適用于其他JVM的實(shí)現(xiàn),甚至其他語言的VM的垃圾收集實(shí)現(xiàn)。
    今天的部分包括1-3,以下是正文:

    第三章 垃圾收集概念

    垃圾收集器負(fù)責(zé)以下幾個事情:
        1.分配內(nèi)存
        2.確保被引用的對象留在內(nèi)存中
        3.回收執(zhí)行中代碼的引用無法到達(dá)的對象占用的內(nèi)存(譯注:強(qiáng)調(diào)執(zhí)行中是為了排除對象互相引用的情況。A、B互相引用,但沒有任何執(zhí)行中
        代碼引用他們,A、B也應(yīng)被回收)
       
    對象被引用稱為活著的(live)。不再被引用的對象稱為死掉的(dead),術(shù)語叫垃圾(garbage)。發(fā)現(xiàn)和釋放(或者叫回收(reclaiming))
    這些垃圾占用的空間叫做垃圾收集(garbage collection)。

    垃圾收集可以解決很多內(nèi)存分配問題,卻不能解決所有的內(nèi)存分配問題。例如,你可以創(chuàng)建對象并無限期的引用著直到?jīng)]有內(nèi)存可用。垃圾收集在
    使用其自身的時間和資源上是一個復(fù)雜的任務(wù)。

    垃圾收集器負(fù)責(zé)的內(nèi)存是由精確的算法來組織、分配和回收的,并對開發(fā)人員隱藏。空間通常從一個被稱為堆(heap)的非常大的內(nèi)存池分配出來。
    垃圾收集的時間由垃圾收集器決定。通常,整個堆或堆的一部分被填滿或者達(dá)到某個閾值的時候,會觸發(fā)垃圾收集。

    滿足內(nèi)存分配的請求是一個困難的任務(wù),這其中包括要從堆中找到一個足夠大的內(nèi)存塊。對于大部分的動態(tài)內(nèi)存分配算法,其主要的問題是需要在
    保持內(nèi)存分配和回收效率的同時避免內(nèi)存碎片。

    優(yōu)秀的垃圾收集器的特征

    垃圾收集器必須是安全有效的。就是說,使用中的數(shù)據(jù)永遠(yuǎn)不能被錯誤的釋放,同時在很少的幾個收集周期內(nèi)垃圾就應(yīng)該被回收。

    垃圾收集器的執(zhí)行效率也必須很優(yōu)秀,暫停時間不能太長。暫停的時候,應(yīng)用系統(tǒng)是不運(yùn)行的。然而,像大部分的計(jì)算機(jī)系統(tǒng)那樣,這里也必須在
    時間、空間、頻率之間做出權(quán)衡。例如,堆很小的時候,垃圾收集的速度很快但堆被填滿的速度更快,這樣就需要更頻繁的垃圾收集。相反的,大
    的堆填滿的速度慢,收集的頻率也慢,但花費(fèi)的時間會比較長。

    另一個特征是有限的內(nèi)存碎片(fragmentation)。當(dāng)垃圾對象的內(nèi)存釋放后,釋放的空間會在各種各樣的區(qū)域形成小塊的空隙以至于可能導(dǎo)致沒
    有一個足夠大的連續(xù)區(qū)域分配給較大的對象。一種減少內(nèi)存碎片的方法叫做壓縮(compaction),在下面垃圾收集器的設(shè)計(jì)決策部分會討論到。

    可擴(kuò)展性同樣很重要。在多核系統(tǒng)上運(yùn)行的多線程程序中,內(nèi)存分配、垃圾收集都不能成為瓶頸。

    設(shè)計(jì)決策

    設(shè)計(jì)和選擇垃圾收集算法時必須做出一系列選擇:
       
        串行還是并行
            在串行收集中,同一時間只做一件事情。例如,即便有多個cpu可用,卻只有一個進(jìn)行收集工作。當(dāng)使用并行收集時,垃圾收集任務(wù)會分
        成幾個小的部分,這些小的部分在不同的cpu上同時執(zhí)行。同時執(zhí)行的操作使得收集速度更快,它的代價(jià)是額外的復(fù)雜性和可能更多的內(nèi)存碎
        片。

        并發(fā)的(Concurrent)還是停止一切(Stop-the-world)
            當(dāng)執(zhí)行停止一切(Stop-the-world)的垃圾收集時,應(yīng)用系統(tǒng)在收集期間完全暫停(suspended)了。另外一種選擇是,一個或多個垃圾
        收集任務(wù)可以和應(yīng)用系統(tǒng)同時并發(fā)的執(zhí)行。通常,一個并發(fā)的收集器,大部分工作并發(fā)的執(zhí)行,但仍會有一些短暫的暫停(stop-the-world
        pauses)。停止一切的垃圾收集比并發(fā)收集更簡單,因?yàn)檎麄€堆都凍結(jié)了,在收集期間對象不會改變。它缺點(diǎn)是一些應(yīng)用程序不喜歡的暫停
        (paused)。相應(yīng)的,并發(fā)收集的暫停時間更短,但收集器必須格外的小心,執(zhí)行收集的同時應(yīng)用系統(tǒng)可能會改變對象的狀態(tài),這會增加一
        些開銷。并發(fā)收集會影響性能并且需要較大的堆內(nèi)存。
       
        壓縮 or 不壓縮 or 拷貝
            當(dāng)收集器判定內(nèi)存中的對象哪些是存活的哪些是垃圾之后,收集器可以壓縮(compact)內(nèi)存,將所有存活的對象放到一起,從而完全的
        恢復(fù)剩余的內(nèi)存。壓縮之后,在第一個空閑位置分配內(nèi)存將會非常的容易和迅速。可以用一個簡單的指針維持下一個可分配對象的位置。相
        對壓縮的收集器,非壓縮(non-compacting)的收集器在原地(in-place)釋放垃圾對象占用的空間,它不會像壓縮的收集器那樣移動存活
        的對象創(chuàng)建一個大的回收區(qū)。非壓縮的好處是收集完成的很快,缺點(diǎn)是可能有內(nèi)存碎片。一般來說,從原地釋放的內(nèi)存分配空間比從壓縮的
        堆分配內(nèi)存更困難些。它必須搜素堆空間找到一個足夠大能容納新對象的連續(xù)內(nèi)存區(qū)域。第三種可供選擇的是復(fù)制(copying)收集器,拷貝
        (或疏導(dǎo)evacuates)所有活動的對象到另一個不同的內(nèi)存區(qū)域。它的好處是原來的區(qū)域可以直接置空,簡單快速的為隨后的內(nèi)存分配做好準(zhǔn)
        備,缺點(diǎn)是需要額外的空間和時間。

    此文已轉(zhuǎn)移到:http://www.xiegq.com/2013/09/15/37.html
    posted on 2013-07-29 21:50 hunter129 閱讀(311) 評論(0)  編輯  收藏 所屬分類: java內(nèi)存管理垃圾收集
    主站蜘蛛池模板: 久久久久久亚洲精品不卡| 手机看黄av免费网址| 久久精品视频免费播放| 亚洲毛片网址在线观看中文字幕| 美女被羞羞网站免费下载| 亚洲精品中文字幕无乱码| 无码午夜成人1000部免费视频| 久久久久久99av无码免费网站| 亚洲精品亚洲人成在线观看下载| 国产偷国产偷亚洲清高APP| 色www永久免费视频| 亚洲人成欧美中文字幕| 免费看美女被靠到爽的视频| 亚洲精品美女久久777777| 久久久久亚洲精品影视| 亚洲最大的成人网| 午夜无遮挡羞羞漫画免费| 亚洲AV无码一区二区三区人| 中国在线观看免费高清完整版| 日本免费在线观看| 亚洲中文字幕第一页在线| 日韩免费视频一区二区| 免费大香伊蕉在人线国产 | 啦啦啦高清视频在线观看免费| 亚洲无限乱码一二三四区| 亚洲成人网在线播放| 99久久免费国产香蕉麻豆| 亚洲国产黄在线观看| 亚洲人成网男女大片在线播放 | 一级女性全黄生活片免费看| 又粗又大又黑又长的免费视频| 国产亚洲欧美在线观看| 亚洲高清专区日韩精品| 4399好看日本在线电影免费| 亚洲高清无码综合性爱视频| 亚洲日韩精品国产3区| 亚洲成av人片一区二区三区| 99热这里有免费国产精品| 亚洲精品无码久久| 日本亚洲成高清一区二区三区| 99亚偷拍自图区亚洲|