JVM:Java Virtual Machine即java虛擬機(jī)
虛擬機(jī):指通過(guò)軟件模擬的具有完整硬件系統(tǒng)功能的陪蜻、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng)
Java虛擬機(jī)詳解02----JVM內(nèi)存結(jié)構(gòu)
Java中的內(nèi)存分配
java程序在運(yùn)行時(shí)募闲,需要在內(nèi)存中的分配空間计技。為了提高運(yùn)算效率,就對(duì)數(shù)據(jù)進(jìn)行了不同空間的劃分扛邑,因?yàn)槊恳黄瑓^(qū)域都有特定的處理數(shù)據(jù)方式和內(nèi)存管理方式摄咆。
具體劃分為如下5個(gè)內(nèi)存空間:
- 棧:存放局部變量
- 堆:存放所有new出來(lái)的東西
- 方法區(qū):被虛擬機(jī)加載的類(lèi)信息、常量导街、靜態(tài)常量等
- 程序計(jì)數(shù)器(和系統(tǒng)相關(guān))
- 本地方法棧
堆內(nèi)存:
和程序開(kāi)發(fā)密切相關(guān)
應(yīng)用系統(tǒng)對(duì)象都保存在Java堆中
所有線程共享java堆
對(duì)分代GC來(lái)說(shuō),堆也是分代的
gc管理的主要區(qū)域
棧內(nèi)存:
線程私有纤子,生命周期和線程相同
棧由一系列幀組成(因此java棧也叫做幀棧)
幀保存一個(gè)方法的局部變量搬瑰、操作數(shù)棧、常量池指針
每一次方法調(diào)用創(chuàng)建一個(gè)幀计福,并壓棧
Java虛擬機(jī)詳解04----GC算法和種類(lèi)【重要】
- 引用計(jì)數(shù)算法(老牌垃圾回收算法跌捆,無(wú)法處理循環(huán)引用徽职,沒(méi)有被java采納)
- 根搜索算法(在根搜索算法基礎(chǔ)上象颖,主要有下面三種)
- 標(biāo)記清除算法
- 復(fù)制算法(新生代的GC)
- 標(biāo)記整理算法(老年代的GC)
- 分代收集算法(新生代的gc+老年代的gc)
- 根據(jù)對(duì)象的存貨周期的不同將內(nèi)存劃分為幾塊。一般是把jva堆分為新生代和老年代:短命對(duì)象為新生代姆钉,長(zhǎng)命對(duì)象為老年代
- 少量對(duì)象存活说订,適合復(fù)制算法:在新生代中,每次gc都發(fā)現(xiàn)有大批對(duì)象死去潮瓶,只有少量存活陶冷,那就選用復(fù)制算法,只需要付出少量存活對(duì)象的復(fù)制成本就可以完成gc
- 大量對(duì)象存活毯辅,適合用標(biāo)記清理/標(biāo)記整理:在老年代中埂伦,因?yàn)閷?duì)象存活率高、沒(méi)有額外空間對(duì)他進(jìn)行分配擔(dān)保思恐,就必須使用標(biāo)記清理/標(biāo)記整理算法進(jìn)行g(shù)c
老年代的對(duì)象中沾谜,有一小部分是因?yàn)樵谛律厥諘r(shí)膊毁,老年代做擔(dān)保進(jìn)來(lái)的對(duì)象;絕大部分對(duì)象是因?yàn)楹芏啻蝕c都沒(méi)有被回收掉進(jìn)入老年代
Java虛擬機(jī)詳解----JVM常見(jiàn)問(wèn)題總結(jié)
類(lèi)加載過(guò)程
- 加載:將類(lèi)的class文件讀入內(nèi)存基跑,并創(chuàng)建java.lang.Class對(duì)象
- 鏈接
- 驗(yàn)證:文件格式婚温、語(yǔ)法語(yǔ)義驗(yàn)證等
- 準(zhǔn)備:為static修飾的靜態(tài)域做默認(rèn)初始化,并在方法區(qū)分配內(nèi)存空間
- 解析:將符號(hào)引用替換為直接引用
- (顯示)初始化
以下幾種情況中媳否,會(huì)執(zhí)行初始化過(guò)程:
- 創(chuàng)建類(lèi)的實(shí)例
- 訪問(wèn)類(lèi)或接口的靜態(tài)變量(final static修飾的常量不會(huì)對(duì)類(lèi)進(jìn)行顯示初始化栅螟。static final修改的變量則會(huì)做顯示初始化)
- 調(diào)用類(lèi)的靜態(tài)方法
- 反射
- 初始化類(lèi)的子類(lèi)(子類(lèi)初始化問(wèn)題:滿足主動(dòng)調(diào)用,即父類(lèi)訪問(wèn)子類(lèi)中的靜態(tài)變量篱竭、方法力图,子類(lèi)才會(huì)初始化,掺逼,否則僅父類(lèi)初始化)
- java虛擬器啟動(dòng)時(shí)被表明為啟動(dòng)類(lèi)的類(lèi)