日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

小編給大家分享一下虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

網(wǎng)站設(shè)計(jì)制作過(guò)程拒絕使用模板建站;使用PHP+MYSQL原生開(kāi)發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);做網(wǎng)站、網(wǎng)站設(shè)計(jì)收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了10年的成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。

一、執(zhí)行引擎

應(yīng)用程序經(jīng)過(guò)編譯,轉(zhuǎn)換為字節(jié)碼文件,字節(jié)碼加載到內(nèi)存空間并不能直接在操作系統(tǒng)上執(zhí)行,執(zhí)行引擎作為Java虛擬機(jī)核心的組成部分,作用就是將字節(jié)碼指令解釋/編譯為對(duì)應(yīng)系統(tǒng)平臺(tái)上的本地機(jī)器指令。

虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

解釋器:虛擬機(jī)啟動(dòng)時(shí)會(huì)根據(jù)預(yù)定義對(duì)字節(jié)碼采用逐行解釋的方式執(zhí)行,將每條字節(jié)碼文件中的內(nèi)容解釋為對(duì)應(yīng)系統(tǒng)平臺(tái)的本地機(jī)器指令執(zhí)行;

JIT編譯器:虛擬機(jī)將源代碼編譯成本地機(jī)器平臺(tái)相關(guān)的機(jī)器語(yǔ)言,并且尋找熱點(diǎn)高頻執(zhí)行的代碼將其放入元空間中,即元空間中存放的JIT緩存代碼;

垃圾回收:對(duì)于沒(méi)有任何引用的對(duì)象標(biāo)記為垃圾,會(huì)被回收釋放內(nèi)存空間。

二、垃圾對(duì)象標(biāo)記

1、引用計(jì)數(shù)法

每個(gè)對(duì)象保存一個(gè)整型引用計(jì)數(shù)器,用來(lái)記錄對(duì)象被引用的次數(shù),當(dāng)該對(duì)象被一個(gè)對(duì)象引用時(shí),計(jì)數(shù)器加1,當(dāng)失去一個(gè)引用時(shí),計(jì)數(shù)器減1;引用計(jì)數(shù)算法就是通過(guò)判斷對(duì)象的引用數(shù)量來(lái)決定對(duì)象是否可以被當(dāng)做垃圾對(duì)象回收掉。

雖然引用計(jì)數(shù)法效率高,但是當(dāng)兩個(gè)對(duì)象互相引用時(shí)會(huì)導(dǎo)致這兩個(gè)對(duì)象一直不會(huì)被回收,這是一個(gè)致命的缺陷。所以JVM并沒(méi)有采用該標(biāo)記算法。

2、可達(dá)性分析算法

可達(dá)性分析算法是基于對(duì)象到根對(duì)象的引用鏈?zhǔn)欠窨蛇_(dá)來(lái)判斷對(duì)象是否可以被回收;

虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

運(yùn)行程序把所有的引用關(guān)系鏈看作一張圖,通過(guò)GC-Roots根對(duì)象對(duì)象集合作為起始點(diǎn),從每個(gè)根節(jié)點(diǎn)向下不斷搜索被根對(duì)象集合所連接的對(duì)象是否可達(dá),搜索路徑稱為引用鏈(Reference-Chain),如果對(duì)象到GC-Roots沒(méi)有任何引用鏈存在,則說(shuō)明此對(duì)象是不可用的,

  • 虛擬機(jī)棧中引用的對(duì)象;

  • 元空間中類(lèi)靜態(tài)屬性引用的對(duì)象;

  • 元空間中常量引用的對(duì)象;

  • 本地方法棧中Native方法引用的對(duì)象;

相對(duì)于引用計(jì)數(shù)法算法,可達(dá)性分析算法則避免了循環(huán)引用導(dǎo)致的問(wèn)題,同樣具備執(zhí)行高效的特點(diǎn),也是JVM采用的標(biāo)記算法。

三、垃圾回收機(jī)制

1、標(biāo)記清除算法

標(biāo)記-清除算法分為標(biāo)記和清除兩個(gè)階段:

標(biāo)記階段:從根對(duì)象集合進(jìn)行掃描,對(duì)存活的對(duì)象對(duì)象標(biāo)記;清除階段:再次掃描發(fā)現(xiàn)未被標(biāo)記的對(duì)象并進(jìn)行回收;

虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

該算法效率不高,進(jìn)行垃圾回收需要暫停應(yīng)用程序,同時(shí)會(huì)產(chǎn)生大量?jī)?nèi)存碎片,后續(xù)程序運(yùn)行過(guò)程中分配內(nèi)存占用較大的對(duì)象時(shí),會(huì)有連續(xù)內(nèi)存不夠情況,容易觸發(fā)再一次垃圾收集動(dòng)作。

2、標(biāo)記整理算法

標(biāo)記整理算法的標(biāo)記過(guò)程類(lèi)似標(biāo)記清除算法,第一階段:標(biāo)記出垃圾對(duì)象;第二階段:讓所有存活的對(duì)象都向內(nèi)存區(qū)一端移動(dòng);第三階段:直接清理掉邊界端以外的內(nèi)存,類(lèi)似于磁盤(pán)整理的過(guò)程;

虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

該垃圾回收算法效率不高,對(duì)象移動(dòng)過(guò)程需要暫停應(yīng)用程序,適用于對(duì)象存活率高的場(chǎng)景(老年代)。

3、復(fù)制算法

復(fù)制算法將內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊,當(dāng)使用的這塊的內(nèi)存用完,就將還存活著的對(duì)象復(fù)制到另外一塊空閑內(nèi)存上,然后使用過(guò)的內(nèi)存空間一次清理。

虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

該算法實(shí)現(xiàn)簡(jiǎn)單,運(yùn)行效率高,但是內(nèi)存空間嚴(yán)重浪費(fèi),適用于對(duì)象存活率低的場(chǎng)景,比如新生代。

4、分代收集算法

當(dāng)前市場(chǎng)上幾乎所有的虛擬機(jī)都采用該回收算法,分代收集算法根據(jù)年輕代和老年代的各自特點(diǎn)采用不同的算法機(jī)制,不同內(nèi)存區(qū)域中對(duì)象生命周期也不同,因此對(duì)堆內(nèi)存不同區(qū)域采用不同的回收策略可以提高垃圾回收?qǐng)?zhí)行效率。通常情況新生代對(duì)象存活率低,回收頻繁,就采用復(fù)制算法;老年代存對(duì)象生命周期長(zhǎng),活率高,就用標(biāo)記清除算法或者標(biāo)記整理算法。

Java堆內(nèi)存一般可以分為新生代、老年代和永久代三個(gè)模塊,如下圖所示:

虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析

新生代

通常情況下,新創(chuàng)建的對(duì)象實(shí)例首先都是放在新生代空間中,所以追求快速的回收掉垃圾對(duì)象,一般情況下,新生代內(nèi)存按照8:1:1的比例分為一個(gè)eden區(qū)和兩個(gè)survivor(survivor0,survivor1)區(qū),對(duì)象實(shí)例大部分在Eden區(qū)中生成;

垃圾回收時(shí)先把eden區(qū)存活對(duì)象復(fù)制到S0區(qū),然后清空eden區(qū),當(dāng)S0區(qū)也滿時(shí),再將eden區(qū)和S0區(qū)存活對(duì)象復(fù)制到S1區(qū),然后清空eden和S0區(qū),之后交換S0區(qū)和S1區(qū)的角色,當(dāng)S1區(qū)無(wú)法存放eden區(qū)和S0區(qū)的存活對(duì)象時(shí),就將存活對(duì)象直接存移到老年代區(qū),當(dāng)老年代區(qū)也滿了,觸發(fā)一次FullGC,即新生代、老年代都進(jìn)行回收。

老年代

老年代區(qū)存放一些生命周期較長(zhǎng)的對(duì)象,對(duì)象實(shí)例在新生代中經(jīng)歷了多次垃圾回收仍然存活的對(duì)象,會(huì)被移動(dòng)到老年代區(qū)中。

以上是“虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當(dāng)前文章:虛擬機(jī)中執(zhí)行引擎和垃圾回收的示例分析
標(biāo)題路徑:http://www.dlmjj.cn/article/jdodgd.html