- JVM 內(nèi)存結(jié)構(gòu)葛闷,運(yùn)行時(shí)數(shù)據(jù)區(qū)各模塊什么作用放案、存放什么數(shù)據(jù)
jvm 內(nèi)存結(jié)構(gòu)包含:
- heap堆區(qū):負(fù)責(zé)存放所有的 對(duì)象以及數(shù)據(jù),是線程共享的呐舔。
- 本地方法棧:本地方法調(diào)用過(guò)程中币励,虛擬機(jī)會(huì)創(chuàng)建棧幀放入到本地方法棧中,維護(hù)的是方法的調(diào)用棧幀
- 虛擬機(jī)棧:Java 方法調(diào)用的棧幀存放的地方珊拼,內(nèi)部有:局部變量表食呻、操作數(shù)棧、方法出口等澎现。
- 方法區(qū):方法區(qū)也稱”永久代“仅胞,它用于存儲(chǔ)虛擬機(jī)加載的類信息、常量剑辫、靜態(tài)變量干旧、是各個(gè)線程共享的內(nèi)存區(qū)域
- 雙親委派模型?為什么需要自定義加載器妹蔽?
在類加載過(guò)程中椎眯,雙親委派機(jī)制保證了類的安全性,保證了類不被多個(gè)classLoad 重復(fù)加載讹开,具體的加載過(guò)程為:當(dāng)classLoad在加載一個(gè)class 的時(shí)候盅视,首先會(huì)判斷當(dāng)前類有沒有被自己加載捐名,如果沒有則會(huì)交給上級(jí)的類加載器加載旦万。
整個(gè)加載過(guò)程為:?jiǎn)?dòng)類加載器 > 擴(kuò)展類加載器 > 應(yīng)用類加載器 > 自定義類加載器
上訴是整個(gè)雙親委派模型,那么為什么要自定義類加載器呢镶蹋?
-- 是因?yàn)檎麄€(gè)類加載器加載的都是固定路徑下的類成艘,如果需要我們需要加載一些自定義的類(來(lái)源)那么就需要實(shí)現(xiàn)自己的類加載器赏半。
主要實(shí)現(xiàn)方式是:繼承ClassLoad 類 并重寫 findClass 方法
loadClass:類加載搜索算法
findClass: 類加載實(shí)現(xiàn)
- GC 如何識(shí)別垃圾,GC 算法有哪幾種
GC 識(shí)別算法主要有兩種:
- 對(duì)象引用法:對(duì)象每次一被引用就在對(duì)象引用計(jì)數(shù)器上加一淆两,每次被回收断箫,對(duì)象就減一,根據(jù)當(dāng)前對(duì)象的引用是否為0 秋冰,判斷是否需要清除仲义。無(wú)法解決對(duì)象互相引用的問(wèn)題,導(dǎo)致這類對(duì)象遲遲無(wú)法被垃圾回收器回收
- 根可達(dá)性分析算法:以虛擬機(jī)棧中剑勾、常量池中的對(duì)象作為GCroot埃撵,分析是否有被這些對(duì)象引用,無(wú)引用的對(duì)下即為垃圾對(duì)下虽另,可被垃圾回收器回收暂刘。相比對(duì)下引用發(fā) 該算法對(duì)無(wú)用對(duì)象的標(biāo)識(shí)比較清楚。
- jvm 為什么需要分代回收機(jī)制捂刺?垃圾收集器了解多少種? 為什么會(huì)棄用 CMS谣拣?
- 首先我們?cè)贘VM 里面有多種垃圾回收算法,各有各的優(yōu)勢(shì)跟缺陷
a 標(biāo)記-清除算法:經(jīng)歷兩個(gè)階段族展,先標(biāo)記垃圾森缠,在進(jìn)行清除,占用空間較少仪缸,但會(huì)產(chǎn)生內(nèi)存碎片辅鲸。
b 標(biāo)記-整理算法:先標(biāo)記垃圾,在進(jìn)行整理腹殿,不會(huì)產(chǎn)生內(nèi)存碎片独悴,但是收集回收時(shí)間較長(zhǎng)
c 標(biāo)記-復(fù)制算法:先標(biāo)記垃圾,在進(jìn)行復(fù)制锣尉,不會(huì)產(chǎn)生內(nèi)存碎片刻炒,但是會(huì)占用2倍的內(nèi)存空間。- 基于以上算法自沧,將JVM的堆區(qū)按照對(duì)下的存在年齡時(shí)長(zhǎng)劃分了年輕代跟老年代坟奥,在不同的區(qū)域下使用不同的垃圾回收算法,這樣能夠最終達(dá)到高效的JVM 回收算法拇厢。
- 各個(gè)分代特點(diǎn):
a. 年輕代對(duì)象的特點(diǎn)是:朝生夕死的對(duì)下比較多爱谁,比較適用于標(biāo)記-復(fù)制算法
b. 老年代的對(duì)下的特點(diǎn)是:不是很容易被垃圾回收器回收,相對(duì)回收的次數(shù)會(huì)少一點(diǎn)孝偎,所以比較適用于標(biāo)記-整理算法访敌。- 基于以上模型出現(xiàn)了很多垃圾回收器?
a. Serial:?jiǎn)尉€程垃圾回收衣盾,STW 時(shí)間較長(zhǎng)
b. ParNew :多線程垃圾回收寺旺,STW 相較 Serial會(huì)比較短爷抓。
c. ps:多線程自適應(yīng)垃圾回收器,對(duì)于分代年齡阻塑、年輕代的區(qū)域大小進(jìn)行動(dòng)態(tài)調(diào)整蓝撇。
d.CMS:針對(duì)老年代進(jìn)行的垃圾回收算法,利用的是 標(biāo)記-清除算法陈莽,將整個(gè)垃圾回收過(guò)程分為:初始標(biāo)記-并發(fā)標(biāo)記(與用戶線程一起工作)-重新標(biāo)記-并發(fā)清除渤昌。減少了 STW 時(shí)間,但是會(huì)產(chǎn)生內(nèi)存碎片走搁。
f. G1: 主要是將整個(gè)Java 堆區(qū) 分成多個(gè)大小獨(dú)立的 region 耘沼,通過(guò)監(jiān)控每個(gè)region 找到需要最先進(jìn)行垃圾回收的區(qū)域進(jìn)行回收,針對(duì) GC-root 需要掃描整個(gè)heap 區(qū)域的問(wèn)題朱盐,使用預(yù)測(cè)的可停頓模型群嗤。