如題,本文的宗旨既是透過對(duì)象的生命周期,來梳理JVM內(nèi)存結(jié)構(gòu)及GC相關(guān)知識(shí),并輔以AOP及雙親委派機(jī)制原理,學(xué)習(xí)不僅僅是海綿式的吸收學(xué)習(xí),還需要自己去分析why,加深對(duì)技術(shù)的理解和認(rèn)知,祝大家早日走上自己的“成金之路”。
Java對(duì)象的創(chuàng)建
本部分,從攻城獅編寫.java文件入手,詳解了編譯、載入、AOP原理。
讀過《程序員的自我修養(yǎng)》的朋友,對(duì)程序的編譯及執(zhí)行會(huì)有一個(gè)很清晰的認(rèn)識(shí):編譯其實(shí)就是將人類能理解的代碼文件轉(zhuǎn)譯為機(jī)器/CPU能執(zhí)行的文件(包括數(shù)據(jù)段、代碼段),而執(zhí)行的過程,則是根據(jù)文件頭部字節(jié)的標(biāo)識(shí)(簡(jiǎn)稱魔數(shù)),映射為對(duì)應(yīng)的文件結(jié)構(gòu)體,找到程序入口,當(dāng)獲取到CPU執(zhí)行權(quán)限時(shí),將方法壓棧,執(zhí)行對(duì)應(yīng)的指令碼,完成相應(yīng)的邏輯操作。
而對(duì)應(yīng).java文件,則先需要使用javac進(jìn)行編譯,編譯后的.class文件,此文件將java程序能讀懂的數(shù)據(jù)段和代碼段,之后用java執(zhí)行文件,既是載入.class文件,找到程序入口,并根據(jù)要執(zhí)行的方法,不停的壓棧、出棧,進(jìn)行邏輯處理。
class文件載入過程
加載
在加載階段,虛擬機(jī)需要完成以下三件事情:
通過一個(gè)類的全限定名來獲取其定義的二進(jìn)制字節(jié)流。
將這個(gè)字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)。
在Java堆中生成一個(gè)代表這個(gè)類的java.lang.Class對(duì)象,作為對(duì)方法區(qū)中這些數(shù)據(jù)的訪問入口。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26