在csdn上搜索了一下但是還沒有相關(guān)知識,不能說沒有或者是太高深我處于新手階段還未能看懂,所以給大家講解一下我所認知的java類的編譯原理。當然不正之處還望大家指點。
1,思考我們在運行一個java程序的時候,虛擬機怎么會知道我們的main方法哪一個java類當中呢?不錯,計算機最強大的就是枚舉,計算機會一個一個地去尋找。
在這個過程我們稱作Cod segmet(內(nèi)存預先加載)2,然乎我們再想,當JDK找到main方法的時候粗儲存在那個內(nèi)存當中?沒錯是棧內(nèi)存當中,當JDK找到main主方法的時候就會在棧內(nèi)存里面為main方法開辟一塊區(qū)域(內(nèi)存),然后在這塊內(nèi)存中一次加載main方法中的語句,當遇到int?。幔剑保?;的時候就會在棧內(nèi)存里main區(qū)域面開辟一塊內(nèi)存,由于是int類型所以是四個字節(jié)的大小,當遇到對象的實例化的時候:dog?。洌剑睿澹鳌。洌铮纾ǎ坏臅r候,JDK就會在堆內(nèi)存中開辟一塊空間去儲存該實例對象的全部屬性(靜態(tài)屬性和方法),僅僅留一個引用在在棧內(nèi)存中(d.name;d.age;等);當遇到方法的時候也會在棧內(nèi)存中main區(qū)域外開辟一塊內(nèi)存,然后再去加載這個方法,如果方法中需要用到屬性就從棧內(nèi)存中的main方法中去尋找,如果尋找不到就回去堆內(nèi)存中去尋找; 3,圖示
新聞熱點
疑難解答