亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JAVA垃圾收集器與內存分配策略詳解

2019-11-26 15:03:04
字體:
來源:轉載
供稿:網友

引言

垃圾收集技術并不是Java語言首創的,1960年誕生于MIT的Lisp是第一門真正使用內存動態分配和垃圾收集技術的語言。垃圾收集技術需要考慮的三個問題是:

1、哪些內存需要回收

2、什么時候回收

3、如何回收

java內存運行時區域的分布,其中程序計數器,虛擬機棧,本地方法區都是隨著線程而生,隨線程而滅,所以這幾個區域就不需要過多考慮回收問題。但是堆和方法區就不一樣了,只有在程序運行期間我們才知道會創建哪些對象,這部分內存的分配和回收都是動態的。垃圾收集器所關注的就是這部分內存。

一 對象死亡判據

垃圾收集器在對一個對象回收之前,首先要判斷對象在程序中是否還有使用的可能性,充要條件就是沒有被程序可訪問引用再指向這個對象實例。最簡單的辦法就是給對象實例添加中添加一個引用計數器,每當有一個引用指向它時,計數器就加一,當引用失效時,計數器就減一,如果計數器值為0則說明沒有引用指向它,可以進行回收。但是這個方法中計數器為0并不是一個必要條件,例如,生成兩個對象實例,每個對象實例的屬性都指向對方,那么這個兩個對象實例分別最少有一個引用。

java采用的是可達性分析算法,即找一部分對象作為"GC Roots"節點,從這些節點開始向下搜索,當某個對象到"GC Roots"節點沒有可達路徑時,說明此對象是不可用的。在java中作為"GC Roots"的節點包括:虛擬機棧中引用的對象,方法區靜態屬性引用的對象,方法區常量引用的對象,本地方法區中本地調用所引用的對象。

引用擴充

如果reference類型的數據中存儲的數值是另一塊內存的起始地址,那么這塊內存就代表著一個引用。一個對象在這種狀態下,只能有被引用和沒有被引用兩種狀態。java對引用概念進行了擴充,將引用分為強引用(new),軟引用(softReference),弱引用(WeakReference),虛引用(PhantomReference)。如果強引用存在,則垃圾收集器不會回收該對象。如果系統即將發生內存溢出異常,那么垃圾回收集器則會回收軟引用對象。弱引用對象只能存活到下一次垃圾收集之前。虛引用對象不會對其生存時間構成任何影響。

對象的自我救贖

在垃圾收集器發現某一個對象到"GC Roots"路徑不可達時,先會判斷該對象是否覆蓋finalize()方法,或是否執行過finalize()方法。如果覆蓋了且沒有執行過該方法,則會將該對象放到低優先級的Finalizer線程中去執行finalize()方法,如果在finalize()方法中該對象又被引用,則會有一次逃脫被回收的命運。

方法區的回收

方法區中主要回收廢棄的常量和無用的類。對于常量,如果沒有引用指向常量,則該常量會被回收。對于類的回收則麻煩許多,首先要判斷該類是無用的類,無用的類要滿足三個條件:1所有類的實例被回收2加載該類的ClassLoader已經被回收3Class沒有被引用,不會通過反射訪問該類的方法。

二 垃圾回收算法

標記-清除算法(Mark-Sweep)

該算法分為兩個階段:首先標記處要回收的對象,標記完成后統一回收所有被標記的對象。

存在的問題:1 標記和清除效率都不高 2 標記清除后會產生大量內存碎片,分配大對象時可能觸發另一次垃圾收集。

復制算法(Copying)

該算法將內存分為兩個等大小的區域,每次只使用一個區域。當一個區域快用完了,就將這個區域中存活的對象復制到另一個區域

優點是避免了內存碎片的產生,缺點是浪費內存空間。

有公司研究表明,新生代的對象98%都是朝生暮死,所以虛擬機把新生代內存劃分為一個較大的Eden空間和兩個較小的Survivor空間。每次只是用Eden空間和一個Survior空間,當進行復制清理時,將Survivor空間和Eden空間中存活的對象復制到另一塊Survivor空間。當Survivor空間不夠用時,就會依賴老年代進行分配擔保。

標記-整理算法(Mark-Compact)

針對老年代對象存活率高的情況,復制算法明顯不合適,于是采用標記整理算法,標記和標記清除算法相同,二后邊的整理則是讓所有存活的對象都向一端移動,然后清理掉邊界外的內存。

分代收集

當前虛擬機都采用分代收集,分代的依據是對象的存活周期。一般新生代存活率低,采用復制算法。老年代存活率高采用標記整理或標記清除。

三垃圾收集器

由于虛擬機采用了分代收集,所以針對不同代收集器也不同。上圖是HotSpot虛擬機的垃圾收集器,連線表示可以協同工作。

Serial收集器,復制算法,它是一個單線程的收集器,并且在進行收集時會暫停其他線程,它默認是client模式下的新生代收集器。

ParNew收集器是Serial收集器的多線程版,它是第一款并發收集器。

Parallel Scavenge收集器可以精確控制吞吐量(用戶代碼運行時間/(用戶代碼時間+垃圾收集時間))

SerialOld收集器是serial收集器的老年版,采用標記整理算法,同樣是單線程收集器。

ParallelOld是ParallelScavenge收集器的老年版,使用多線程和標記整理算法。

CMS收集器是以最短回收停頓時間為目標的收集器,采用標記清除算法,在重視響應速度的系統中得以應用。但是缺點是對CPU資源敏感,無法處理浮動垃圾,易產生內存碎片。

G1收集器是最新推出的收集器,可應用在JDK1.7u4及以上版本。它將內存分為多個Region,新生代和老年代分別包含多個Region。G1跟蹤各個Region,判斷垃圾價值大小,優先回收價值最大的Region。

四 內存分配與回收策略

對象的分配,就是在堆上分配,對象主要分配在新生代的Eden區域中,如果啟動了本地線程分配緩沖,則按線程優先在TLAB中分配。少數情況也有可能直接分配到老年代。

對象在Eden區域分配時,當Eden區域沒有足夠空間,虛擬機會發起一次新生代垃圾收集。

如果對象需要大量連續內存空間,例如String類型和數組。大對象對于虛擬機內存分配來說是一個壞消息,朝生暮死的大對象是要命的壞消息。經常出現大對象會導致多次出發垃圾收集。對于這類對象,可以設置參數將大對象直接存入老年代。

每一個對象都有一個年齡計數器,當對象在Eden區域出生,每經過一次GC,并且存入Survivor,計數器加一。當年齡增加到一定程度(默認15),則會被存入老年代。同時,如果Survivor空間中相同年齡對象占空間超過50%,則也會直接進入老年代。

總結

垃圾收集算法:復制算法,標記-清除算法,標記-清理算法。

垃圾收集器特點:新生代用復制,老年代用標記清理,CMS用標記清除。

Eden空間大小和Survivor空間大小默認比率為8:1,即新生代10%的空間用來存放復制后的對象。

以上就是本文的全部內容,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91免费精品国偷自产在线| 亚洲精品自拍第一页| 国产精品第一页在线| 国产一区二区三区丝袜| 亚洲精品wwww| 亚洲精品久久7777777| 久久久久久久香蕉网| 91色视频在线导航| 高清欧美一区二区三区| 国产成人精品优优av| 欧美电影在线观看网站| 国产一区二区三区久久精品| 国产91精品久久久| 97视频免费在线观看| 亚洲区中文字幕| 一区二区三欧美| 国产精品久久婷婷六月丁香| 欧美日韩国产999| www日韩欧美| 92国产精品视频| 久99久在线视频| 91精品国产91久久久久久| 91产国在线观看动作片喷水| 日韩美女在线观看一区| 欧美亚洲成人精品| 亚洲人成电影网站色| 成人97在线观看视频| 亚洲日本aⅴ片在线观看香蕉| 精品偷拍一区二区三区在线看| 欧美体内谢she精2性欧美| 久久久久久久久久国产精品| 久热精品视频在线观看| 国产精品91久久| 韩剧1988在线观看免费完整版| 国产亚洲在线播放| 亚洲高清一区二| 亚洲jizzjizz日本少妇| 亚洲va欧美va国产综合剧情| 亚洲欧美三级在线| 91亚洲国产成人久久精品网站| 亚洲最大在线视频| 久青草国产97香蕉在线视频| 欧美国产日韩免费| 在线观看国产成人av片| 欧美成人黑人xx视频免费观看| 2018国产精品视频| 欧美日韩亚洲系列| 亚洲成人激情小说| 日韩精品欧美激情| 久久精品99久久久久久久久| 成人伊人精品色xxxx视频| 69精品小视频| 国产精品入口福利| 92国产精品久久久久首页| 国产精品1区2区在线观看| 欧美高清一级大片| 色综合久久天天综线观看| 黑人巨大精品欧美一区二区一视频| 欧美色另类天堂2015| 欧美精品www在线观看| 色妞在线综合亚洲欧美| 亚洲影视九九影院在线观看| 91在线观看免费观看| 久久色精品视频| 国产日韩一区在线| 浅井舞香一区二区| 日韩精品免费电影| 成人免费视频网| 亚洲的天堂在线中文字幕| 欧美激情区在线播放| 久久久久久久999| 亚洲国产精品久久久| 国产精品国产自产拍高清av水多| 91免费福利视频| 成人免费高清完整版在线观看| 永久555www成人免费| 久久久国产影院| 日本成人在线视频网址| 欧美有码在线观看| 91久久久在线| 7777精品视频| 日本午夜在线亚洲.国产| 久久久亚洲欧洲日产国码aⅴ| 久久久精品电影| 日韩中文字幕在线视频| 亚洲电影在线看| 亚洲国产精品高清久久久| 欧洲成人午夜免费大片| 亚洲视频电影图片偷拍一区| 国产精品日韩专区| 97在线免费视频| 久久99热这里只有精品国产| 成人a在线视频| 久久久久久伊人| 欧美巨猛xxxx猛交黑人97人| www.欧美免费| 久久久久这里只有精品| 亚洲一二在线观看| 久久久久中文字幕| 中文字幕亚洲国产| 在线视频欧美日韩| 美女性感视频久久久| 欧美专区日韩视频| 亚洲一区二区三区视频播放| 欧美日韩第一视频| 精品久久久91| 久久久国产在线视频| 成人欧美在线观看| 国产精品免费久久久久影院| 日韩在线观看网站| 欧美极度另类性三渗透| 久久影视电视剧免费网站清宫辞电视| 亚洲一二在线观看| 久久久久久午夜| 亚洲欧美日韩在线高清直播| 国产成人精品在线| 色哟哟入口国产精品| 日韩在线免费高清视频| 一级做a爰片久久毛片美女图片| 国产欧美精品在线| 日本精品久久久久影院| 亚洲欧美激情精品一区二区| 久久69精品久久久久久久电影好| 精品久久久香蕉免费精品视频| 色综合伊人色综合网| 精品国产老师黑色丝袜高跟鞋| 成人国产精品一区| 久久久国产一区二区三区| 久久精品国产一区二区三区| 亚洲一区免费网站| 有码中文亚洲精品| 91理论片午午论夜理片久久| 日本一欧美一欧美一亚洲视频| 成人精品aaaa网站| 亚洲成avwww人| 久久精品国产综合| 亚洲精品短视频| 国内精品久久久久久久久| 国产精品视频一| 久久视频在线播放| 亚洲人成网站免费播放| 国产精品精品久久久| 91天堂在线观看| 久久久精品免费视频| 日韩av在线免播放器| 日韩高清人体午夜| 91九色在线视频| 色噜噜久久综合伊人一本| 欧美电影免费观看高清| 国产日韩在线观看av| 亚洲最大av网站| 久久亚洲春色中文字幕| 欧美午夜女人视频在线| 久久精彩免费视频| 久久视频中文字幕| 在线播放国产一区中文字幕剧情欧美| 久久伊人精品视频| 九色成人免费视频| 成人乱人伦精品视频在线观看| 亚洲va欧美va在线观看| 亚洲精选在线观看| 精品国产区一区二区三区在线观看| 亚洲黄一区二区| 亚洲精品久久久久中文字幕二区|