
jvm是java 運(yùn)行壞境 jre的一部分?
作用:將class 文件 轉(zhuǎn)成字節(jié)碼
特點(diǎn):一次編譯多出運(yùn)行
主要有5個(gè)區(qū)域? :
?1:java棧 2:本地方法區(qū)?3:程序計(jì)數(shù)器(線程私有 )
生命周期:隨著方法的開始開始,隨著方法的結(jié)束而 結(jié)束。跟線程有關(guān)系
4:堆區(qū)? 5: 方法區(qū)? (線程共有 )
堆區(qū)的生命周期:
方法區(qū)?的生命周期:不能回收: 例如final或者static?修飾的 ?
==========講解5個(gè)區(qū)域

1:java棧 也叫虛擬機(jī)棧??
java棧:?
? ?主要存儲(chǔ)的是棧幀(就是方法)? methedA()
? 棧幀里存儲(chǔ)的是
1:局部變量? ? ? 例如 : int x=0? int y=1? 存放在局部變量表
?2;操作 數(shù)棧? :例如? ??int z=x+y
3:動(dòng)態(tài)鏈接‘:? 被調(diào)用的方法無法在編譯期確定,只能在運(yùn)行時(shí)確定???例如: 接口回調(diào),多態(tài)動(dòng)態(tài)綁定
4:返回地址:方法正常退出
===========================
2:本地方法區(qū)
存儲(chǔ)線程運(yùn)行 Native方法的數(shù)據(jù)指令返回地址? ?結(jié)構(gòu)和java棧一樣 區(qū)別就是?Native方法 是c或者c++的
===========================
3:程序計(jì)數(shù)器
當(dāng)前線程正在執(zhí)行的字節(jié)碼的指令地址和行號(hào),確保jvm多線程運(yùn)行
================
4:堆? ?存儲(chǔ)new 出來的對(duì)象
================
5:方法區(qū):??
1:存放字節(jié)碼
2:存儲(chǔ)類信息? 例如:常量(final 修飾的) 靜態(tài)變量(static 修飾 )
3. 字符串相關(guān)的常量池?
======================
jvm 內(nèi)存模型

==============
Gc? 回收機(jī)制


1:做垃圾回收的時(shí)候 把不可回收的對(duì)象copy到預(yù)留區(qū)域
然后把存放對(duì)象 區(qū)域做格式化? :例如:電腦 值 c盤和d盤 我要 清理c盤,我先把我需要的文件 copy到d盤 然后再把c盤格式化
2:內(nèi)存碎片: 理解保存的對(duì)象 內(nèi)存地址不連續(xù) ,
例如:內(nèi)存地址是1格到4格,1存了一個(gè)對(duì)象 3存了一個(gè)對(duì)象,在來 一個(gè)對(duì)象需要2個(gè)格子 存儲(chǔ),那2格子就浪費(fèi)了
90% 的對(duì)象 朝生夕死只有10% 的需要 回收
在交換區(qū) 使用復(fù)制算法? 10% 做預(yù)留??
交換區(qū):是 堆內(nèi)存中的新生代中的 s0 s1
1:新生代 :復(fù)制回收算法
2:老年代::標(biāo)記清楚 和標(biāo)記整理
===============標(biāo)記清楚

============標(biāo)記整理 算法
由于標(biāo)記清除算法 有內(nèi)存碎片,所以和標(biāo)記整理算法配合非常好,因?yàn)闃?biāo)記整理 會(huì)在標(biāo)記清除之后把不可分配的對(duì)象 進(jìn)行物理移動(dòng) ,誰設(shè)置成連續(xù)的內(nèi)存地址。
一般不回開啟標(biāo)記整理 因?yàn)橄?性能除非 內(nèi)存碎片計(jì)較多

測(cè)試:
