<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

    2013年7月31日 #

    本系列文章由作者@hunter129 翻譯,轉(zhuǎn)載請注明出處。

    今天是第三章的剩余部分:4.性能度量指標(biāo),5.分代收集的基本原理。

    性能度量
       
    一些指標(biāo)用來評估垃圾收集的性能,包括:

        吞吐量(Throughput)
            一個(gè)很長的周期中,除去花費(fèi)在垃圾收集上的時(shí)間占總時(shí)間的百分比。
        垃圾收集開銷(Garbage collection overhead)
            與吞吐量相反,這是垃圾收集占總時(shí)間的百分比。
        (譯注:為什么需要兩個(gè)指標(biāo)呢?對于并發(fā)的垃圾收集算法,垃圾收集的部分任務(wù)和應(yīng)用系統(tǒng)同時(shí)運(yùn)行導(dǎo)致上述兩個(gè)指標(biāo)加起來會(huì)大于100%)
        暫停時(shí)間(Pause time)
            垃圾收集發(fā)生時(shí),應(yīng)用系統(tǒng)暫停的時(shí)間。
        收集頻率(Frequency of collection)
            垃圾收集相對于應(yīng)用系統(tǒng)運(yùn)行發(fā)生的頻率。
        占用空間(Footprint)
            一種大小的指標(biāo),例如堆大小。
        反應(yīng)時(shí)間(Promptness)
            對象變成垃圾之后到內(nèi)存可用的時(shí)間
            
    一個(gè)交互式應(yīng)用需要較低的暫停時(shí)間,反之持續(xù)的執(zhí)行時(shí)間對于非交互式應(yīng)用更加重要。一個(gè)實(shí)時(shí)應(yīng)用程序要求在垃圾收集中的暫停以及收集
    器的整個(gè)周期擁有較少的抖動(dòng)。運(yùn)行在個(gè)人計(jì)算機(jī)或嵌入式設(shè)備中的應(yīng)用可能主要關(guān)心小的空間占用。

    分代收集

    使用分代(generational collection)收集技術(shù)時(shí),內(nèi)存分為很多代(generations),分離的存儲池存儲不同年齡的對象。例如,最通用的配置
    中有兩代:一個(gè)用于存放年輕的對象,另一存放年老的對象。

    不同的代使用不同的算法執(zhí)行垃圾收集任務(wù),每個(gè)算法會(huì)基于本代獨(dú)特的特征進(jìn)行優(yōu)化。分代的垃圾收集基于一種被稱為弱分代假設(shè)(weak
    generational hypothesis),它是關(guān)于在幾種語言(包括java語言)編寫的應(yīng)用程序中觀察到的結(jié)果:

        大部分的分配的對象不會(huì)被引用(存活)很長時(shí)間,這些對象在年輕的時(shí)候就死掉了
        年老對象引用年輕對象的情況很少出現(xiàn)
       
    年輕代的收集發(fā)生的相對頻繁、有效、快速,因?yàn)槟贻p代的空間通常比較小并且有很多的對象都不再被引用。

    在年輕代幾次收集后仍然生存的對象最終會(huì)晉升(promoted)或者被授予(tenured)到年老代。如圖1。年老代一般比年輕代大,并且增長的速度
    很慢。結(jié)果是,年老代的收集很少發(fā)生,但是會(huì)花費(fèi)更長的時(shí)間才能完成。

     
            圖1 分代的垃圾收集
       
    為年輕代設(shè)計(jì)的收集算法主要關(guān)注在速度方面,因?yàn)槔占?jīng)常發(fā)生。另一方面,在空間方面更有效率的算法管理著年老代,因?yàn)槟昀洗紦?jù)了
    大部分的堆空間并且年老代的垃圾密度比較低。

    此文已轉(zhuǎn)移到:http://www.xiegq.com/2013/09/16/39.html
    posted @ 2013-07-31 17:03 hunter129 閱讀(240) | 評論 (0)編輯 收藏

    2013年7月29日 #

    本系列文章由作者@hunter129 翻譯,轉(zhuǎn)載請注明出處。

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

    第三章 垃圾收集概念

    垃圾收集器負(fù)責(zé)以下幾個(gè)事情:
        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)存可用。垃圾收集在
    使用其自身的時(shí)間和資源上是一個(gè)復(fù)雜的任務(wù)。

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

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

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

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

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

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

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

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

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

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

    此文已轉(zhuǎn)移到:http://www.xiegq.com/2013/09/15/37.html
    posted @ 2013-07-29 21:50 hunter129 閱讀(323) | 評論 (0)編輯 收藏

    2013年7月22日 #

    本系列文章由作者@hunter129 翻譯,轉(zhuǎn)載請注明出處。

    第二章 直接 VS 自動(dòng)內(nèi)存管理

    內(nèi)存管理是這樣的一些過程,識別哪些對象不再有用,回收(釋放)這些對象使用的內(nèi)存,使這些內(nèi)存在隨后的分配中可用。在一些編程語言中,
    內(nèi)存分配是程序員的責(zé)任。這項(xiàng)復(fù)雜的任務(wù)導(dǎo)致了很多常見的錯(cuò)誤,如怪異、錯(cuò)誤的程序行為和程序崩潰。結(jié)果是,開發(fā)人員很大比例的時(shí)間都
    在調(diào)試解決這些錯(cuò)誤。

    在直接內(nèi)存管理的程序中經(jīng)常犯的一個(gè)錯(cuò)誤是懸掛引用(dangling references)。對象使用的空間被回收時(shí),可能還有其他對象引用著。如果
    一個(gè)對象擁有這樣(懸掛)的引用,當(dāng)它試圖訪問原始對象時(shí),很可能這塊空間已經(jīng)分配給了新的對象,結(jié)果導(dǎo)致了未預(yù)期的訪問。

    另外一個(gè)在直接內(nèi)存管理中常見的錯(cuò)誤是內(nèi)存泄露(space leaks)。內(nèi)存分配完不再使用后卻沒有釋放就會(huì)產(chǎn)生這樣的錯(cuò)誤。例如,你打算釋放
    一個(gè)鏈表(linked list)使用的空間時(shí)犯了一個(gè)錯(cuò)誤,只回收了鏈表的第一個(gè)對象,其余的對象就不再被引用了,然而這些對象脫離了程序的控
    制,再也無法使用或恢復(fù)。如果產(chǎn)生了足夠的泄露,內(nèi)存將持續(xù)消耗,直到再也沒有可用的部分。

    作為替代方案,一種稱為垃圾收集(garbage collector)的自動(dòng)內(nèi)存管理方法正在被廣泛使用,尤其是在現(xiàn)代的面向?qū)ο笳Z言中。自動(dòng)內(nèi)存管理
    使得編寫出更多抽象的接口、更多穩(wěn)定代碼成為可能。

    垃圾收集避免了懸掛引用問題,因?yàn)楸荒程幰玫膶ο笥肋h(yuǎn)不會(huì)被收集,內(nèi)存不會(huì)被釋放。垃圾收集同樣解決了上面提到的內(nèi)存泄露問題,因?yàn)椴?br /> 再被引用的內(nèi)存將自動(dòng)釋放。
    (譯注:實(shí)際上java中依然有“內(nèi)存泄露”問題,只是這種泄露與上文中提到的傳統(tǒng)上的泄露不同。可以理解為對內(nèi)存的不恰當(dāng)使用,會(huì)導(dǎo)致垃圾收
    集頻繁發(fā)生[本應(yīng)存儲對象的沒有存儲下來],或OOM錯(cuò)誤[本來應(yīng)釋放的內(nèi)存沒有釋放]。)

    上一篇:JAVA內(nèi)存管理(一)綜述和介紹
    此文已轉(zhuǎn)移到:http://www.xiegq.com/2013/09/14/25.html
    posted @ 2013-07-22 21:55 hunter129 閱讀(298) | 評論 (0)編輯 收藏

    2013年7月21日 #

    本系列文章由作者@hunter129 翻譯,轉(zhuǎn)載請注明出處。

    準(zhǔn)備發(fā)一系列帖子,主要介紹java內(nèi)存管理機(jī)制。
    主要內(nèi)容是對sun的內(nèi)存管理白皮書《Memory Management in the Java HotSpot™ Virtual Machine》的翻譯,也會(huì)加上自己的理解。
    英文不好,我慢慢翻譯,大家慢慢看。當(dāng)然可以去看原版,作為附件上傳了。

    這是第一篇帖子,主要內(nèi)容是白皮書的第一章,對整篇文檔的介紹。

    第一章 介紹
    Java的一個(gè)長處就是提供了自動(dòng)內(nèi)存管理機(jī)制,因此屏蔽了開發(fā)人員進(jìn)行直接內(nèi)存管理的復(fù)雜性。
    這篇文章提供了一個(gè)針對J2SE 5內(nèi)存管理的概覽。描述了垃圾收集器(garbage collectors)如何有效的進(jìn)行內(nèi)存管理,并給出了一些關(guān)于收
    集器的選擇和收集器運(yùn)行時(shí)內(nèi)存區(qū)域大小配置的建議。這篇文章還列出了影響垃圾收集器(garbage collector)行為最常用的選項(xiàng),并且提供
    了很多詳細(xì)文檔的鏈接,因此本文可以作為參考資料使用。

    第二章為初學(xué)者介紹自動(dòng)內(nèi)存管理的概念。本章會(huì)簡單的討論一下自動(dòng)內(nèi)存管理和程序員直接內(nèi)存管理。

    第三章整體介紹了垃圾收集的概念、設(shè)計(jì)決策和性能度量。同時(shí),介紹了基于對象生命周期的分代內(nèi)存管理機(jī)制,這是一種常用的內(nèi)存組織方式。
    這種方法已經(jīng)被證明在減少垃圾收集暫停時(shí)間、很寬泛應(yīng)用范圍內(nèi)的整體消耗方面很有效。

    剩下的部分是針對HotSpot JVM(譯注,HotSpot JVM是Sum/Oracle 開發(fā)的一種JVM,其他的還有BEA/Oracle的JRockit,IBM的J9 VM等)的內(nèi)容。
    第四章介紹了4鐘垃圾收集器,其中一個(gè)是在J2SE 5.0 update6中增加的,并且描述了分代的內(nèi)存組織。對于每種垃圾收集器,簡要描述他們使用
    的算法類型和調(diào)優(yōu)參數(shù)

    第五章描述了一種在J2SE 5.0提供的新技術(shù),它會(huì)根據(jù)應(yīng)用系統(tǒng)運(yùn)行的平臺和操作系統(tǒng)自動(dòng)選擇垃圾收集器和堆大小,并根據(jù)用戶行為動(dòng)態(tài)進(jìn)行
    垃圾收集優(yōu)化。這種技術(shù)稱為功效學(xué)(ergonomics)。

    第六章給出了一些垃圾收集器的選擇和配置的推薦配置,同時(shí)也提供了一些處理OutOfMemoryError錯(cuò)誤的建議。第七章簡要描述了一些用于垃圾收
    集性能(garbage collection performance)評估的工具。第八章列出了用于控制垃圾收集器的選擇和行為最常用的命令行參數(shù)。最后,第九章提
    供了更多涉及這篇文章內(nèi)容的詳細(xì)文檔。

    附件請移步金山快盤下載:http://www.kuaipan.cn/file/id_60654657730512059.htm

    此文已轉(zhuǎn)移到:http://www.xiegq.com/2013/09/11/12.html
    posted @ 2013-07-21 23:03 hunter129 閱讀(464) | 評論 (1)編輯 收藏

    2010年11月17日 #

    本來想把root用戶改成可以進(jìn)行遠(yuǎn)程鏈接,使用客戶端工具把root@localhost 改成root@%。

    修改完成后數(shù)據(jù)庫直接報(bào)了一個(gè)錯(cuò)。之后就起不來了總是報(bào)1067錯(cuò)誤,進(jìn)程意外中斷。

    逼不得已把mysql重新裝了下,數(shù)據(jù)文件拷回去,這些數(shù)據(jù)庫是可以啟動(dòng)起來了。

    但是一些個(gè)表總是報(bào)Table "xxx" doesn't exist的錯(cuò)誤,用客戶端工具登錄可以看到這些表,但是不能看到表的結(jié)構(gòu)和數(shù)據(jù)。

    后來找到原來是我重新裝了數(shù)據(jù)庫后ibdata1文件的位置變化了,以前的InnoDB類型的表都不能使用了。

    把原來的ibdata1文件拷貝到新的位置也還是不行。

    最后在my.ini文件中修改innodb_data_home_dir指向ibdata1文件的位置。

    設(shè)置innodb_force_recovery=4,重啟后再刪除即可。

    posted @ 2010-11-17 20:31 hunter129 閱讀(176) | 評論 (0)編輯 收藏

    僅列出標(biāo)題  下一頁
    主站蜘蛛池模板: 在线日韩日本国产亚洲| 久久久久亚洲av成人无码电影| 四虎免费影院4hu永久免费| 亚洲av中文无码乱人伦在线r▽| 亚洲日本乱码卡2卡3卡新区| 免费成人在线视频观看| 亚洲Av无码国产情品久久| 国产亚洲福利在线视频| 久久影视综合亚洲| 狼群影院在线观看免费观看直播| 国产亚洲精品高清在线| 国产成人免费在线| 亚洲精品无码久久毛片| 添bbb免费观看高清视频| 永久看日本大片免费35分钟| 国产精品日本亚洲777| 韩国欧洲一级毛片免费| 亚洲中文字幕无码爆乳| 久久久久国色AV免费观看性色 | 亚洲国产精品无码中文字| 国产精品1024在线永久免费| 亚洲国产中文字幕在线观看| 在线永久看片免费的视频| 国产国产人免费人成成免视频| 亚洲AV无码成人专区| 欧美最猛性xxxxx免费| a级毛片免费高清毛片视频| 亚洲成AV人片在线观看无| 国产成人一区二区三区免费视频 | 三年片在线观看免费大全| 亚洲国产日韩精品| 久久夜色精品国产亚洲AV动态图| 麻豆精品成人免费国产片| 立即播放免费毛片一级| 国产精品亚洲片在线va| 国产最新凸凹视频免费| av免费不卡国产观看| 色欲色香天天天综合网站免费| 亚洲天堂中文字幕| 成人最新午夜免费视频| 日韩免费在线中文字幕|