成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

GC一覽

Berwin / 1820人閱讀

摘要:每被引用一次,引用次數(shù)加一。相反,不再被引用時,引用計數(shù)減一。從被稱為的一些對象出發(fā),找到其引用的對象,再到其間接引用的對象,形成一條引用鏈。凡是不在引用鏈里面的對象,被稱為不可達對象,被標記為需要回收。

(我在知乎的專欄文章地址: https://zhuanlan.zhihu.com/p/... )

簡介

C/C++等語言中需要手動管理內(nèi)存,操作繁瑣,還容易忘記釋放內(nèi)存。
為了把程序員從這些繁瑣的操作中解放出來,所以引入了GC。
GC的主要工作就是尋找不再需要的對象,釋放其內(nèi)存。這句話中蘊含著兩個操作:

定位不需要的對象

釋放內(nèi)存

定位不需要的對象 引用計數(shù) Reference counting

每個對象都有一個變量,記錄了自己被引用的次數(shù)。每被引用一次,引用次數(shù)加一。相反,不再被引用時,引用計數(shù)減一。當引用次數(shù)為0的時候,說明對象需要被回收。

優(yōu)點:實現(xiàn)簡單

缺點:無法解決循環(huán)引用

改進:

添加弱引用

用trial deletion解決循環(huán)引用

使用tracing GC例如mark-sweep GC輔助

跟蹤 Tracing

基于可達性(reachable)分析。從被稱為GC Roots的一些對象出發(fā),找到其引用的對象,再到其間接引用的對象,形成一條引用鏈。凡是不在引用鏈里面的對象,被稱為不可達(Unreachable)對象,被標記為需要回收。

優(yōu)點: 目前主流的GC算法,解決了引用計數(shù)的問題。
缺點:實現(xiàn)較為復(fù)雜

跟蹤算法如何垃圾回收 標記-清除

標記清除算法分為“標記”和“清除”兩個階段:首先標記出需要回收的對象,標記完成之后統(tǒng)一清除對象。它的優(yōu)點是效率高,缺點是容易產(chǎn)生內(nèi)存碎片。

復(fù)制

它將可用內(nèi)存容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊用完之后,就將還存活的對象復(fù)制到另外一塊上面,然后在把已使用過的內(nèi)存空間一次理掉。它的優(yōu)點是實現(xiàn)簡單,效率高,不會存在內(nèi)存碎片。缺點就是需要2倍的內(nèi)存來管理。

標記-整理

標記操作和“標記-清理”算法一致,后續(xù)操作不只是直接清理對象,而是在清理無用對象完成后讓所有 存活的對象都向一端移動,并更新引用其對象的指針。因為要移動對象,所以它的效率要比“標記-清理”效率低,但是不會產(chǎn)生內(nèi)存碎片。

總結(jié)

標記-整理和復(fù)制算法是對標記-清除算法的改進,解決了一些標記-清除算法的缺點。但是并不意味著后兩種算法優(yōu)于標記-清除算法,只是有所取舍,在工程上權(quán)衡。

分代

分代不是一種新的算法,而是對已有的算法的工程上調(diào)優(yōu)。
由于對象的存活時間有長有短,所以對于存活時間長的對象,減少被gc的次數(shù)可以避免不必要的開銷。這樣我們就把內(nèi)存分成新生代和老年代,新生代存放剛創(chuàng)建的和存活時間比較短的對象,老年代存放存活時間比較長的對象。這樣每次僅僅清理年輕代,老年代僅在必要時時再做清理可以極大的提高GC效率,節(jié)省GC時間。

實現(xiàn) 歷史

Serial -XX:+UseSerialGC
Parallel -XX:+UseParallelGC -XX:+UseParallelOldGC
CMS -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
G1 -XX:+UseG1GC

CMS

默認gc,分代gc,經(jīng)典的Eden, Survivor, OldGen, PermGen。

1.8中PerGen被廢棄,部分被MetaSpace代替。

改進的mark-sweep算法。

年輕代使用Parallel,老年代才使用CMS。可以通過參數(shù)配置不同的回收器。

初始標記(CMS-initial-mark stop the world) -> 并發(fā)標記(CMS-concurrent-mark) -> 重新標記(CMS-remark stop the world) -> 并發(fā)清除(CMS-concurrent-sweep) ->并發(fā)重設(shè)狀態(tài)等待下次CMS的觸發(fā)(CMS-concurrent-reset)

G1

多個Region, 每個Region都有Eden,Survivor,Old,Humongous。

因為劃分多個Region,所以單個Region可能比較小,對于那些較大的對象用Humongous儲存

對象分配策略
TLAB(Thread Local Allocation Buffer)線程本地分配緩沖區(qū)
Eden區(qū)
Humongous區(qū)
TLAB是為了避免同步的預(yù)分配區(qū)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68403.html

相關(guān)文章

  • JDK 9 變更一覽

    摘要:概述是一個主要版本的發(fā)布這里介紹的是對的特性和增強的實現(xiàn)是的增強提案,包括增強建議和路線圖流程規(guī)范請求,描述了針對平臺的建議和最終規(guī)范主要變更統(tǒng)一模塊化標準這是全新的編程組件模塊,是可命名的可自描述的代碼和數(shù)據(jù)集合。 概述 java9是一個主要版本的發(fā)布 這里介紹的是Oracle對JDK9的特性和增強的實現(xiàn) JEP是JDK的增強提案,包括增強建議和路線圖流程 JSR(Java規(guī)范請...

    sherlock221 評論0 收藏0
  • jvm體系結(jié)構(gòu)和gc調(diào)優(yōu)(一)

    摘要:做好的優(yōu)化能大大提升系統(tǒng)的性能體系結(jié)構(gòu)概覽大致流程如圖編譯好的文件通過類加載器從物理結(jié)構(gòu)轉(zhuǎn)換成運行時數(shù)據(jù)區(qū)結(jié)構(gòu)。后面再寫一篇關(guān)于調(diào)優(yōu)的 什么是jvm jvm是java虛擬機的縮寫。所有的java程序都是在jvm上運行的。做好jvm的優(yōu)化能大大提升系統(tǒng)的性能 jvm體系結(jié)構(gòu)概覽 showImg(https://segmentfault.com/img/bVba5lB?w=1049&h=6...

    wupengyu 評論0 收藏0
  • JDK11新特性解讀

    摘要:千呼萬喚,于正式發(fā)布版本即,也就是官方推薦可以廣泛使用的版本,其中發(fā)布了包括等個新特性,讓我們一睹為快。一新特性一覽二發(fā)布計劃日期階段說明對進入階段的變化會應(yīng)用越來越嚴格的審查。我們需要支持以保持競爭力并與最新標準保持同步。 千呼萬喚,JDK11于2018-09-25正式發(fā)布GA版本(GA即General Availability,也就是官方推薦可以廣泛使用的版本),其中發(fā)布了包括ZG...

    piglei 評論0 收藏0
  • jvm原理

    摘要:在之前,它是一個備受爭議的關(guān)鍵字,因為在程序中使用它往往收集器理解和原理分析簡稱,是后提供的面向大內(nèi)存區(qū)數(shù)到數(shù)多核系統(tǒng)的收集器,能夠?qū)崿F(xiàn)軟停頓目標收集并且具有高吞吐量具有更可預(yù)測的停頓時間。 35 個 Java 代碼性能優(yōu)化總結(jié) 優(yōu)化代碼可以減小代碼的體積,提高代碼運行的效率。 從 JVM 內(nèi)存模型談線程安全 小白哥帶你打通任督二脈 Java使用讀寫鎖替代同步鎖 應(yīng)用情景 前一陣有個做...

    lufficc 評論0 收藏0
  • 淺析JVM之內(nèi)存管理

    摘要:概要要理解的內(nèi)存管理策略,首先就要熟悉的運行時數(shù)據(jù)區(qū),如上圖所示,在執(zhí)行程序的時候,虛擬機會把它所管理的內(nèi)存劃分為多個不同的數(shù)據(jù)區(qū),稱為運行時數(shù)據(jù)區(qū)。 這是一篇有關(guān)JVM內(nèi)存管理的文章。這里將會簡單的分析一下Java如何使用從物理內(nèi)存上申請下來的內(nèi)存,以及如何來劃分它們,后面還會介紹JVM的核心技術(shù):如何分配和回收內(nèi)存。 JMM ( Java Memory Model )概要 show...

    Eric 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<