java運(yùn)行時(shí)數(shù)據(jù)區(qū)域
程序計(jì)數(shù)器
程序計(jì)數(shù)器是一塊比較小的內(nèi)存空間怖喻,它可以看成當(dāng)前線程所執(zhí)行的字節(jié)碼的行號指示器充尉。在虛擬機(jī)的概念模型里氛谜,字節(jié)碼解釋器工作時(shí)就是通過改變這個(gè)計(jì)數(shù)器的值來選取下一條需要執(zhí)行的字節(jié)碼命令java虛擬機(jī)棧
與程序計(jì)數(shù)器一樣燥撞,java虛擬機(jī)棧(java Vritual machine Stacks)也是線程私有的投剥,它的生命周期與線程相同。
虛擬機(jī)棧描述的是java方法執(zhí)行的內(nèi)存模型提完,每個(gè)方法執(zhí)行的同時(shí)都會創(chuàng)建一個(gè)棧幀(stack frame)可用于存儲局部變量表形纺,操作數(shù)棧,動態(tài)鏈接徒欣,方法出口等信息逐样,每一個(gè)方法從被調(diào)用到完成的過程,就對應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中入棧到出棧的過程。本地方法棧
本地方法棧(Native Method Stack )與虛擬機(jī)棧發(fā)揮的作用非常相似脂新,他們之間區(qū)別是虛擬機(jī)棧為虛擬機(jī)執(zhí)行的java方法工作挪捕,而本地方法棧為虛擬機(jī)使用到的Native方法工作java堆
java堆(java Heap)是java虛擬機(jī)所管理的內(nèi)存中的最大的一塊。此區(qū)域的唯一目的就是存放對象實(shí)例争便,幾乎所有的對象實(shí)例都是在這里分配內(nèi)存方法區(qū)
方法區(qū)(Method Area) 與java堆一樣级零,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲已被虛擬機(jī)加載的類信息滞乙,常量奏纪,靜態(tài)變量,即時(shí)編譯器編譯后的代碼等數(shù)據(jù)運(yùn)行時(shí)常量池
運(yùn)行時(shí)常量池(Runtime Constant Pool)是方法區(qū)的一部分斩启,class文件除了有類的版本序调,字段,方法兔簇,接口等描述信息之外发绢,還有一項(xiàng)信息是常量池(constant pool table),用于存放編譯期生成的各種字面量和符號引用垄琐,這部分將在類加載后進(jìn)入方法區(qū)的運(yùn)行時(shí)常量區(qū)存放
如何判斷對象死亡
- 引用計(jì)數(shù)器算法
- 可達(dá)性分析算法(java虛擬機(jī)使用的方法)
可達(dá)性分析算法通過一系列的稱為“GC root”的對象作為起始點(diǎn)边酒,從這些節(jié)點(diǎn)開始向下搜索,搜索所走過的路徑稱為引用鏈(Reference Chain)
可以作為GC root的對象包括
1.虛擬機(jī)棧中引用的對象
2.方法區(qū)中類靜態(tài)屬性引用的對象
3.方法區(qū)域中常量引用的對象
本地方法棧中JNI引用的對象
垃圾收集算法
1.標(biāo)記清除法
2.復(fù)制算法
3.標(biāo)記-整理算法
垃圾收集器
1.seiral收集器 新生代中使用 復(fù)制算法
2.serial old 收集器 老年代中使用 整理算法
3.ParNew收集器 新生代中使用 serial收集器的多線程版本
4 parallel Scavenge收集器 復(fù)制算法 達(dá)到一個(gè)可控制的吞吐量
5 parallel old parallel scavenge的老年代
6 CMS收集器 (Concurrent Mark Sweep)以獲取回收停頓時(shí)間為目標(biāo)的收集器 標(biāo)記-清除算法
執(zhí)行流程:初始標(biāo)志 -》 并發(fā)標(biāo)志 -》重新標(biāo)志 -》并發(fā)清除
7.G1收集器
特點(diǎn):并行與并發(fā)狸窘,分代收集墩朦,空間整合(整理算法) 可預(yù)測的停頓