第一部分 運行時數(shù)據(jù)內(nèi)存
程序計數(shù)器:改變程序計數(shù)器的值,可以選取下一條字節(jié)碼指令。程序計數(shù)器 支持 程序控制流的指示器,分支,循環(huán),跳轉(zhuǎn),異常處理,線程恢復(fù)等基礎(chǔ)操作(線程私有)
Java堆:所以對象實例和數(shù)組內(nèi)存分配的地方(線程共享)?
Java虛擬機(jī)棧:一般是指局部變量表部分,有基本數(shù)據(jù)類型,對象引用(線程私有)
本地方法棧:有Java虛擬機(jī)棧一樣,但是本地方法棧是為了本地方法使用的(線程私有)
方法區(qū):用于存儲已被虛擬機(jī)加載的類型信息,常量,靜態(tài)變量,即時編譯后的代碼緩存等數(shù)據(jù)(線程共享)
第二部分 對象
對象的創(chuàng)建:分配內(nèi)存方式 1.指針碰撞 2 空閑列表
對象的組成:1.對象頭? 2.實例數(shù)據(jù)? ?3填充數(shù)據(jù)
對象的定位:1.句柄? 2.指針
第三部分 判斷對象是否死亡
可達(dá)性分析算法:從GC root 根對象啊為節(jié)點集,開始搜索對象,搜索的路徑形成“引用連” ,若對象在該鏈上,則說明對象還可以使用,若不在,則對象不能使用
引用計數(shù)算法:在對象中設(shè)置一個應(yīng)用計數(shù)器,每當(dāng)被引用就加一,若引用失效,則將減一,若數(shù)據(jù)為0時,說明該對象失效。
第四部分 垃圾收集算法
分代收集理論:1.弱分代理論:大多數(shù)對象就是朝生夕滅? 2.強(qiáng)分代理論:當(dāng)對象可以經(jīng)過多次垃圾收集都沒有消亡就難以消亡。
標(biāo)記-清除算法:首先標(biāo)記要清除的對象,然后第一步完成之后,進(jìn)行清除操作。缺點:1.會產(chǎn)生碎片空間 2.當(dāng)數(shù)據(jù)龐大時,效率變低。
標(biāo)記-復(fù)制算法:把內(nèi)存分為大小均等倆部分,每次只使用其中一塊內(nèi)存,當(dāng)其中這一塊內(nèi)存使用完,把活著對象復(fù)制到另一塊,然后把使用過后內(nèi)存清空。缺點:內(nèi)存變小,效率變低
標(biāo)記-整理算法:首先和標(biāo)記-清理算法的標(biāo)記階段一樣,然后把存活的對象移動到一端,然后以存活的對象為邊界,把未存活的對象進(jìn)行清除。
第五部分 垃圾收集器
新生代
serial收集器:單線程,當(dāng)使用該收集器時,就得停掉其他用戶線程。
ParNew收集器:實際時多線程版本的serial收集器。
Parallel Scavenge收集器:采用標(biāo)記-復(fù)制算法,可以并行的多線程收集器。
老年代
CMS收集器:采用的標(biāo)記-清除算法,該收集器一種獲取最短回收停頓時間為目標(biāo)的收集器。
Serial Old收集器:單線程,使用標(biāo)記-整理算法,作用:一 在JDK5之前與Parallel Scavenge搭配,二作為CMS失敗的替補(bǔ)方案。
Parallel Old收集器:基于標(biāo)記-整理算法,是一個并發(fā)多線程收集器,他注重吞吐量或者處理器資源較為稀缺的場合。
新生-老年代
G1收集器:它是一款面向服務(wù)器端應(yīng)用的垃圾回收器,它的設(shè)計思路是采用基于Region的內(nèi)存布局形式。