99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

JVM

2018-05-03 23:57 更新

筆者能力有限,總結(jié)有誤的地方,請(qǐng)讀者協(xié)作更正。

1.類的加載機(jī)制

關(guān)注點(diǎn): ?什么是類的加載 ?類的生命周期 ?類加載器 ?雙親委派模型

1)談一談?lì)惖膶?shí)例化順序,比如:父類靜態(tài)數(shù)據(jù),構(gòu)造函數(shù),字段等的執(zhí)行順序? 先靜態(tài)-->先父后子-->非靜態(tài)代碼塊-->構(gòu)造函數(shù)

2)java代碼的執(zhí)行編譯過(guò)程 ? 主要就是兩部:java源文件由編譯器編譯成字節(jié)碼文件,字節(jié)碼文件由虛擬機(jī)解釋執(zhí)行。

具體來(lái)說(shuō),源碼需要經(jīng)過(guò)詞法分析器組件,語(yǔ)法分析器組件,語(yǔ)義分析器組件,最后經(jīng)過(guò)代碼生成器組件編譯成字節(jié)碼文件。

3)java類的生命周期?

一個(gè)java類的完整的生命周期會(huì)經(jīng)歷加載、連接、初始化、使用、和卸載五個(gè)階段,當(dāng)然也有在加載或者連接之后沒(méi)有被初始化就直接被使用的情況。

4)類加載器?

類加載器是java語(yǔ)言強(qiáng)大的特征之一, 默認(rèn)情況下有三種類加載器(引導(dǎo)類加載器,擴(kuò)展類加載器,應(yīng)用類加載器),我們也可以自定義類加載器。 應(yīng)用程序的每一個(gè)類都由ClassLoader加載,java類是被動(dòng)態(tài)的加載到內(nèi)存,java的一大特點(diǎn),也稱為運(yùn)行時(shí)綁定。

5)什么是類加載器的雙親委派模型?

就是類加載器之間的的層次關(guān)系,該模型要求除了頂層的啟動(dòng)類加載器之外,其余的類加載器都要有父類加載器,而且這種關(guān)系一般通過(guò)組合關(guān)系來(lái)實(shí)現(xiàn),而不是通過(guò)繼承。

某一個(gè)類加載器在接到加載類的請(qǐng)求時(shí)候,首先會(huì)將任務(wù)委托給父類加載,依次遞歸,如果父類加載器可以完成類加載任務(wù),則成功返回;如果父類加載器無(wú)法完成加載任務(wù),將拋出ClassNotFoundException異常后,再調(diào)用自己的findClass()方法進(jìn)行加載,依次類推。

好處:

防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼。 如果沒(méi)有雙親委派模型而是由各個(gè)類加載器自行加載的話,如果用戶編寫了一個(gè)java.lang.Object的同名類并放在ClassPath中,多個(gè)類加載器都去加載這個(gè)類到內(nèi)存中,系統(tǒng)中將會(huì)出現(xiàn)多個(gè)不同的Object類,那么類之間的比較結(jié)果及類的唯一性將無(wú)法保證,將會(huì)給虛擬機(jī)的安全帶來(lái)隱患。

2.JVM內(nèi)存結(jié)構(gòu)

關(guān)注點(diǎn): ?內(nèi)存結(jié)構(gòu) ?對(duì)象分配規(guī)則

1)JVM的內(nèi)存分配?

Java虛擬機(jī)的運(yùn)行時(shí)數(shù)據(jù)區(qū)包括:Java堆、Java虛擬機(jī)棧、方法區(qū)、PC寄存器、本地方法棧,還有常量池。它們被分為兩大類-------線程共享、私有數(shù)據(jù)區(qū)。

2)虛擬機(jī)內(nèi)存分配的各個(gè)區(qū)域作用?

堆:

new處理的對(duì)象都存放在堆中,堆的大小可以通過(guò)-Xmx和-Xms來(lái)控制; 堆被分為新生代、舊生代、持久代新創(chuàng)建的對(duì)象都用新生代內(nèi)存分配,舊生代用于存放新生代中多次經(jīng)過(guò)垃圾回收仍然存活的對(duì)象;

棧:

每個(gè)線程執(zhí)行每個(gè)方法時(shí)候都會(huì)在棧中申請(qǐng)一個(gè)棧幀,用于存放此次方法調(diào)用過(guò)程中臨時(shí)的變量、參數(shù)、中間結(jié)果等;

本地方法棧:

用于支持native方法執(zhí)行,存儲(chǔ)每個(gè)native方法調(diào)用的狀態(tài)

方法區(qū):

持久代實(shí)現(xiàn)方法區(qū),主要用來(lái)存放已經(jīng)加載的類的信息,方法,常量等;可以通過(guò)XX:PermSize和-XX:MaxPermSize來(lái)指定持久帶初始化值和最大值。

3.GC算法 垃圾回收

關(guān)注點(diǎn): ?對(duì)象存活判斷 ?GC算法 ?垃圾回收器

1)垃圾回收采用什么算法實(shí)現(xiàn)?按照基本策略分為:

引用計(jì)數(shù)器(Reference Counting): 比較舊的一個(gè)算法,原理是此對(duì)象有一個(gè)引用;增加一個(gè)計(jì)數(shù),增加一個(gè)引用;刪除一個(gè)引用,減少一個(gè)計(jì)數(shù)。 垃圾回收時(shí),只收集計(jì)數(shù)為0的對(duì)象。 存在最致命的問(wèn)題是,無(wú)法處理循環(huán)引用的問(wèn)題。

標(biāo)記-清除(Mark-Sweep): 此算法分為兩個(gè)階段,第一個(gè)階段從引用根節(jié)點(diǎn)開始標(biāo)記被引用的對(duì)象; 第二個(gè)階段遍歷整個(gè)堆,把未標(biāo)記的對(duì)象清除。此算法需要暫停整個(gè)應(yīng)用,同時(shí),會(huì)產(chǎn)生內(nèi)存碎片。

復(fù)制(Copying): 此算法把內(nèi)存空間劃分為相等的區(qū)域,每次只使用其中一個(gè)區(qū)域,垃圾回收時(shí)候,遍歷當(dāng)前的區(qū)域,把正在使用中的對(duì)象復(fù)制到另一個(gè)區(qū)域。 算法每次只處理正在使用的對(duì)象,因?yàn)閺?fù)制成本小,同時(shí)復(fù)制過(guò)去之后還能進(jìn)行相應(yīng)的內(nèi)存調(diào)整,不會(huì)出現(xiàn)碎片問(wèn)題。 缺點(diǎn)就是,需要兩倍的內(nèi)存空間。

標(biāo)記-整理(Mark-Compact): 此算法集合了“標(biāo)記-清除”和“復(fù)制”兩個(gè)算法的優(yōu)點(diǎn)分為兩個(gè)階段,第一階段從根節(jié)點(diǎn)開始標(biāo)記所有被引用的對(duì)象,第二階段遍歷整個(gè)堆,把清除未標(biāo)記的對(duì)象并且存活的對(duì)象“壓縮”到堆的其中一塊,按照順序排放。 此算法避免了“標(biāo)記-清除”的碎片問(wèn)題,同時(shí)也避免了“復(fù)制”算法的空間問(wèn)題。

2)Java對(duì)新生代和舊生代采取了不同的垃圾回收機(jī)制

新生代的GC: 新生代通常存活時(shí)間較短,居于Coping算法來(lái)進(jìn)行回收; 采用空指針的方式來(lái)控制GC觸發(fā),指針保持最后一個(gè)分配的對(duì)象在新生代區(qū)間位置,當(dāng)有新的對(duì)象要分配內(nèi)存時(shí)候,用于檢查空間是否足夠,不夠就觸發(fā)GC; 在執(zhí)行機(jī)制上提供了串行GC,并行回收GC,和并行GC;

舊生代GC: 舊生代GC對(duì)象存活的時(shí)間比較長(zhǎng),比較穩(wěn)定;

采用標(biāo)記(Mark)算法來(lái)進(jìn)行回收,就是掃描出存活的對(duì)象,回收位被標(biāo)記的對(duì)象,回收后對(duì)對(duì)騰出的空間進(jìn)行合并。 在執(zhí)行機(jī)制上JVM提供了串行GC,并行GC和并發(fā)GC;

4.GC分析 命令調(diào)優(yōu)

關(guān)注點(diǎn): ?GC日志分析 ?調(diào)優(yōu)命令 ?調(diào)優(yōu)工具

調(diào)優(yōu)主要的目的是減少GC的頻率和Full GC的次數(shù),過(guò)多的GC和Full GC是會(huì)占用很多的系統(tǒng)資源(主要是CPU),影響系統(tǒng)的吞吐量。

調(diào)優(yōu)手段:主要是通過(guò)控制堆內(nèi)存的各個(gè)部分的比例和GC策略來(lái)實(shí)現(xiàn),JVM提供兩種較為簡(jiǎn)單的GC策略的設(shè)置方式;

1)吞吐量?jī)?yōu)先 ? ? JVM以吞吐量為指標(biāo),自行選擇相應(yīng)的GC策略及控制新生代與舊生代的大小比例,來(lái)達(dá)到吞吐量指標(biāo)。這個(gè)值可由-XX:GCTimeRatio=n來(lái)設(shè)置

2)暫停時(shí)間優(yōu)先 ? ? JVM以暫停時(shí)間為指標(biāo),自行選擇相應(yīng)的GC策略及控制新生代與舊生代的大小比例,盡量保證每次GC造成的應(yīng)用停止時(shí)間都在指定的數(shù)值范圍內(nèi)完成。這個(gè)值可由-XX:MaxGCPauseRatio=n來(lái)設(shè)置

想了解更多請(qǐng)閱讀
https://www.zybuluo.com/Yano/note/321063

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)