成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

GC一覽

Berwin / 1874人閱讀

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

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

簡(jiǎn)介

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

定位不需要的對(duì)象

釋放內(nèi)存

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

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

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單

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

改進(jìn):

添加弱引用

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

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

跟蹤 Tracing

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

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

跟蹤算法如何垃圾回收 標(biāo)記-清除

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

復(fù)制

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

標(biāo)記-整理

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

總結(jié)

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

分代

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

實(shí)現(xiàn) 歷史

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

CMS

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

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

改進(jìn)的mark-sweep算法。

年輕代使用Parallel,老年代才使用CMS??梢酝ㄟ^(guò)參數(shù)配置不同的回收器。

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

G1

多個(gè)Region, 每個(gè)Region都有Eden,Survivor,Old,Humongous。

因?yàn)閯澐侄鄠€(gè)Region,所以單個(gè)Region可能比較小,對(duì)于那些較大的對(duì)象用Humongous儲(chǔ)存

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/68403.html

相關(guān)文章

  • JDK 9 變更一覽

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

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

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

    wupengyu 評(píng)論0 收藏0
  • JDK11新特性解讀

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

    piglei 評(píng)論0 收藏0
  • jvm原理

    摘要:在之前,它是一個(gè)備受爭(zhēng)議的關(guān)鍵字,因?yàn)樵诔绦蛑惺褂盟占骼斫夂驮矸治龊?jiǎn)稱,是后提供的面向大內(nèi)存區(qū)數(shù)到數(shù)多核系統(tǒng)的收集器,能夠?qū)崿F(xiàn)軟停頓目標(biāo)收集并且具有高吞吐量具有更可預(yù)測(cè)的停頓時(shí)間。 35 個(gè) Java 代碼性能優(yōu)化總結(jié) 優(yōu)化代碼可以減小代碼的體積,提高代碼運(yùn)行的效率。 從 JVM 內(nèi)存模型談線程安全 小白哥帶你打通任督二脈 Java使用讀寫鎖替代同步鎖 應(yīng)用情景 前一陣有個(gè)做...

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

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

    Eric 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<