在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 對(duì)比Ruby和Python的垃圾回收

            對(duì)比Ruby和Python的垃圾回收

            作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

            注:這篇文章基于我在布達(dá)佩斯的RuPy大會(huì)上所作的演講。我覺得與其直接將幻燈片發(fā)布出來,不如在我還有印象的時(shí)候?qū)⑺鼘懗刹┛蛠淼母幸饬x。同樣,我會(huì)在將來發(fā)布RuPy大會(huì)的視頻鏈接。我計(jì)劃將在Conf大會(huì)上發(fā)表類似的演講,除了有關(guān)于的部分,并且將對(duì)比MRI,J以及Rubinius的器是怎樣工作的。

            本文引用地址:http://www.biyoush.com/article/201609/304199.htm

            如果想要對(duì)器以及內(nèi)部原理有更加深入的了解,你可以在我即將出版的新書《Ruby Under a Microscope》中找到答案。

            circuitory-sysvsdtem-polish

            如果算法和業(yè)務(wù)邏輯是一個(gè)人的大腦,那么機(jī)制是人體的哪個(gè)器官呢?

            在”Ruby ”大會(huì)上,我想對(duì)比Ruby和內(nèi)部的垃圾回收機(jī)制是一件很有意思的事情。在開始之前,我們?yōu)槭裁匆懻摾厥諜C(jī)制呢?畢竟這是一個(gè)最迷人的,最令人激動(dòng)的主題,不是嗎?你們有多少人對(duì)垃圾回收機(jī)制感到興奮?(許多的大會(huì)參與者竟然舉起了雙手!)

            最近,在Ruby社區(qū)中有一篇帖子,關(guān)于怎樣通過修改Ruby GC的設(shè)置來提高單元測(cè)試的速度。這棒極了!通過減少GC垃圾回收的處理來提高測(cè)試的速度,這是一件很好的事情,但是不怎的,GC不會(huì)真正的讓我感到興奮。就如咋一看就感覺令人厭煩,枯燥的技術(shù)帖子。

            事實(shí)上,垃圾回收是一個(gè)令人著迷的主題:垃圾回收算法不僅是計(jì)算機(jī)科學(xué)歷史一個(gè)重要的部分,更是前沿研究的一個(gè)主題。例如,MRI Ruby解釋器使用的”Mark Sweep”算法已經(jīng)超過了50年的歷史,與此同時(shí),在Rubinius解釋器中使用的一種垃圾回收算法,是在Ruby中的另一種實(shí)現(xiàn)方式,這種算法僅僅是在2008才被研究出來。

            然而,”垃圾回收”的這個(gè)名稱,是非常的不恰當(dāng)?shù)摹?/p>

            應(yīng)用程序的心臟

            垃圾回收系統(tǒng)要做的不僅僅是”回收垃圾”。事實(shí)上,它主要完成三個(gè)重要任務(wù):

            為新的對(duì)象分配內(nèi)存

            標(biāo)記垃圾對(duì)象

            回收垃圾對(duì)象占用的內(nèi)存

            想象你的應(yīng)用程序是一個(gè)人的身體:所有你寫的優(yōu)雅的代碼,你的商業(yè)邏輯,你的算法,將會(huì)成為你的應(yīng)用程序的大腦或智能。與此類似的,你認(rèn)為垃圾回收器會(huì)成為身體的哪一個(gè)部分呢?(我從大會(huì)的聽眾中得到了很多有趣的答案:腎,白細(xì)胞)

            heart-polishefwefwefwefwef

            我認(rèn)為垃圾回收器是一個(gè)應(yīng)用的心臟。正如心臟為身體的其他部分提供血液和養(yǎng)料一樣,垃圾回收器提供內(nèi)存和對(duì)象供程序使用。如果你的心臟停跳,你將活不了幾秒。如果垃圾回收器停止運(yùn)行或者變慢,就像動(dòng)脈阻塞一樣,你的程序?qū)⒆兊穆聛碜詈笏赖?

            一個(gè)簡(jiǎn)單的例子

            通過例子來驗(yàn)證理論是一種很好的方式。這里有一個(gè)簡(jiǎn)單的類,用Python和Ruby寫成,我們可以將它們作為一個(gè)簡(jiǎn)單的例子:

            codfdbfdhhgrthrthrth45t34te

            于此同時(shí),兩種代碼如此相似讓我感到非常吃驚:Python和Ruby在表達(dá)相同的語義時(shí)幾乎沒有差別。但是,兩種語言的內(nèi)部實(shí)現(xiàn)方式是否相同呢?

            空閑對(duì)象鏈表

            在上面的代碼中,當(dāng)我們調(diào)用了Node.new(1)之后,ruby將會(huì)做什么?也就是說,Ruby怎樣創(chuàng)建一個(gè)新的對(duì)象?

            令人驚訝的是,Ruby做的事情非常少!事實(shí)上,在代碼運(yùn)行之前,Ruby解釋器會(huì)提前創(chuàng)建成千上萬的對(duì)象放置到一個(gè)鏈表中,這個(gè)鏈表被稱為”空閑對(duì)象鏈表”(free list)??臻e對(duì)象鏈表(`free list`)在概念上看起來像下面的樣子:

            frgfbfgthrthrthee-list1

            每一個(gè)白色方塊可以想象成一個(gè)預(yù)創(chuàng)建的,沒有使用的Ruby對(duì)象。當(dāng)我們調(diào)用Node.new,Ruby簡(jiǎn)單的使用一個(gè)對(duì)象,并且將它的引用返回給我們:

            freegfhhrthrth-list2

            在上圖中,左邊的灰色方塊代表一個(gè)活躍的Ruby對(duì)象,被我們的代碼所使用,而其余的白色方塊代碼沒有使用的對(duì)象。(注意:當(dāng)然,圖中是一種簡(jiǎn)化的實(shí)現(xiàn)版本。事實(shí)上,Ruby將會(huì)使用另外一個(gè)對(duì)象保存字符串”ABC”,使用第三個(gè)對(duì)象保存Node的定義,以及其他的對(duì)象保存代碼處理過的抽象語法數(shù)”AST”,等待。)

            如果我們?cè)俅握{(diào)用Node.new,Ruby僅僅返回另外一個(gè)對(duì)象的引用。

            frefbhfhthrte-list3
            mcchkhkhkhjkarthy

            約翰麥卡錫在1960年在Lisp中首次實(shí)現(xiàn)了垃圾回收機(jī)制

            這中使用預(yù)創(chuàng)建對(duì)象鏈表的簡(jiǎn)單算法發(fā)明于50多年前,它的作者是傳說中的計(jì)算機(jī)科學(xué)家,約翰麥卡錫,正是他實(shí)現(xiàn)了最初的Lisp解釋器。Lisp不僅是第一個(gè)函數(shù)式編程語言,并且包含了計(jì)算機(jī)科學(xué)中許多突破性的進(jìn)展。其中之一便是通過垃圾回收機(jī)制自動(dòng)管理內(nèi)存。

            標(biāo)準(zhǔn)版Ruby,也就是”Matz’s Ruby Interpreter”(MRI),使用了一種類似于約翰麥卡錫在1960年實(shí)現(xiàn)的Lisp的垃圾回收算法。就像Lisp一樣,Ruby會(huì)預(yù)先創(chuàng)建對(duì)象并且在你創(chuàng)建對(duì)象或值的時(shí)候返回對(duì)象的引用。

            在Python中分配對(duì)象內(nèi)存

            從上面我們可以看出,Ruby會(huì)預(yù)先創(chuàng)建對(duì)象,并且保存在空閑對(duì)象鏈表(free list)中。那么Python呢?


            上一頁(yè) 1 2 3 下一頁(yè)

            關(guān)鍵詞: Ruby Python 垃圾回收

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉