成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java中堆和垃圾回收機制的介紹-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

成都創(chuàng)新互聯(lián)公司網(wǎng)站建設公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務為基礎,以質量求生存,以技術求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,網(wǎng)站設計、做網(wǎng)站,塑造企業(yè)網(wǎng)絡形象打造互聯(lián)網(wǎng)企業(yè)效應。

這篇文章將為大家詳細講解有關java中堆和垃圾回收機制的介紹,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

堆通常是一個可以被看做一棵樹的數(shù)組對象。堆中某個節(jié)點的值總是不大于或不小于其父節(jié)點的值;堆總是一棵完全二叉樹。將根節(jié)點大的堆叫做大堆或大根堆,根節(jié)點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。堆是非線性數(shù)據(jù)結構,相當于一維數(shù)組,有兩個直接后繼。

堆又叫做 “GC堆,"由于現(xiàn)在收集器基本都采用分代收集算法,所以Java堆還可以細分為:新生代和老年代,比例是1:2;再細致一點新生代內部又劃分為Eden區(qū)、Survivor區(qū),比例為8:1。

下圖顯示了堆的結構:

java中堆和垃圾回收機制的介紹

對象在堆中內存的分配是有嚴格規(guī)定的,策略為:

  • 對象優(yōu)先在新生代Eden區(qū)分配內存;

  • 大對象直接進老年代,主要是長字符串和數(shù)組這些需要大量連續(xù)內存空間的對象;

  • 長期存活的對象進入老年代。Eden區(qū)內存不夠時,JVM發(fā)起一次MinorGC,對象的年齡加一,默認對象年齡到15時進入老年代;

  • 動態(tài)年齡判定。相同年齡所有對象大小的總和大于 Survivor 空間的一半,大于等于該年齡的對象進入老年代

新生代 GC指Minor GC,在新生代的進行垃圾回收,頻繁且快。 老年代 GC(Major GC/Full GC)在老年代進行垃圾回收,通常伴隨著至少一次的minor gc。速度慢。Full GC在如下幾種情況下都會被觸發(fā):

  1. 老年代空間不足;

  2. 方法區(qū)空間不足;

  3. 調用System.gc(),建議JVM進行full gc;

  4. 長期存活的對象轉入老年代,空間不足;

  5. 沒有足夠的連續(xù)空間分配給大對象;

  6. 新生代垃圾回收存活的對象太多,S1放不下,老年代擔??臻g不足,擔??臻g指的是老年代大可用的連續(xù)空間是否大于新生代所有對象總空間。

堆里面幾乎放了所有的對象,那我們怎么知道這些對象是否還有用呢?JVM提供了兩種方法來判定:

  • 引用計數(shù)法:給對象添加一個引用計數(shù)器,每次被引用,計數(shù)器值加一,引用失效,計數(shù)器值減一,當引用數(shù)為0時,表示對象不存活。引用計數(shù)法無法解決循環(huán)引用問題,周志朋老師書里面有詳細的例子,也是比較容易理解的。

  • 可達性分析法:以 ”GC Roots“對象為起始點,就像是樹的根節(jié)點,向下搜索,搜索走過的路徑稱為引用鏈,如果一個對象到 GC Roots起始點沒有引用鏈,則此對象不可達,是需要被回收的。GC Roots是指虛擬機棧引用的對象,本地方法棧引用的對象,方法區(qū)靜態(tài)屬性引用的對象,方法區(qū)常量引用的對象。

上面提到了引用,對象的存活都和引用有關,引用類型又分為強引用,軟引用,弱引用,虛引用。

  • 強引用,new出來的對象,垃圾回收器絕不會回收它;

  • 軟引用,在系統(tǒng)將要發(fā)生OMM前會回收這些對象的內存;

  • 弱引用,垃圾收集器工作時只要發(fā)現(xiàn),馬上回收;

  • 虛引用,形同虛設,任何時候都可能被回收。

實際上可達性分析法判定的不可達對象不會馬上回收,對象真正被回收需要經(jīng)過兩次標記。第一次標記就是被判定為不可達對象,然后進行一次篩選,篩選條件是此對象是否有必要執(zhí)行finalize()方法。如果沒有重寫finalize()方法或者finalize()方法已經(jīng)被虛擬機調用過,finalize()方法只會被系統(tǒng)調用一次。這兩種情況都是”沒有必要執(zhí)行的“。如果有必要,這個對象會被放在F-Quene隊列中,由虛擬機自動建立的低優(yōu)先級的Finalizer線程去執(zhí)行finalize()方法。這期間GC會對F-Quene中的對象進行第二次小規(guī)模標記,如果對象依然沒有被引用,那就會被回收,沒有被篩選的對象不一定被回收。

我們已經(jīng)知道對象什么時候被回收了,那如何回收呢?介紹四種最常用的垃圾回收算法:

  • 標記-清除:先標記需清除的對象,統(tǒng)一回收----效率不高,會產(chǎn)生大量不連續(xù)的碎片;

  • 復制算法:將內存分塊,每次只使用一塊,使用完后,將存活的對象復制到另一塊上;

  • 標記整理:先標記存活對象,然后讓所有存活對象向一端移動,直接清理端邊界以外的內存;

  • 分代算法,堆分隊新生代和老年代,新生代每次收集都會有大量的對象死去,選擇復制算法。老年代存活率比較高,且沒有額外空間進行分配擔保,選擇標記清除或者標記整理算法。

垃圾收集算法是一種內存回收的思想,具體的實現(xiàn)是垃圾收集器。簡要介紹下常用的垃圾收集器:

  • serial串行收集器。單線程,垃圾回收的時候,必須暫停其他工作。新生復制,老年標記整理。簡單高效;

  • ParNew 收集器。serial的多線程版本;

  • Parallel Scavenge 收集器,復制算法的多線程收集器。注重吞吐量,cpu運行代碼時間/cpu耗時總時間。新生復制,老年標記整理;

  • Serial Old 收集器,老年代版本;

  • Parallel Old 收集器,Parallel Scavenge老年代版本;

  • CMS 收集器,注重最短時間停頓。并發(fā)收集器,垃圾收集線程與用戶線程(基本上)同時工作。 標記清除算法

關于java中堆和垃圾回收機制的介紹就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享標題:java中堆和垃圾回收機制的介紹-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://jinyejixie.com/article8/djejop.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供用戶體驗網(wǎng)站制作、網(wǎng)站排名響應式網(wǎng)站、關鍵詞優(yōu)化、品牌網(wǎng)站設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
无为县| 井陉县| 博湖县| 安乡县| 江都市| 济阳县| 新密市| 万安县| 兴国县| 原平市| 哈巴河县| 沈阳市| 高台县| 阳朔县| 余干县| 游戏| 元阳县| 宁都县| 辛集市| 周口市| 临西县| 景德镇市| 临潭县| 鸡西市| 水城县| 临汾市| 石狮市| 铜川市| 新巴尔虎左旗| 大洼县| 浙江省| 西畴县| 阿图什市| 凤城市| 衢州市| 南陵县| 蒙山县| 三明市| 明光市| 大庆市| 民乐县|