史上最全的Android面試題集錦(九)


Java基本知識點

1、Java的類加載過程

jvm將.class類文件信息加載到內(nèi)存并解析成對應(yīng)的class對象的過程,注意:jvm并不是一開始就把所有的類加載進內(nèi)存中,只是在第一次遇到某個需要運行的類才會加載,并且只加載一次

主要分為三部分:1、加載,2、鏈接(1.驗證,2.準(zhǔn)備,3.解析),3、初始化

1:加載

類加載器包括 BootClassLoader、ExtClassLoader、APPClassLoader

2:鏈接

驗證:(驗證class文件的字節(jié)流是否符合jvm規(guī)范)

準(zhǔn)備:為類變量分配內(nèi)存,并且進行賦初值

解析:將常量池里面的符號引用(變量名)替換成直接引用(內(nèi)存地址)過程,在解析階段,jvm會把所有的類名、方法名、字段名、這些符號引用替換成具體的內(nèi)存地址或者偏移量。

3:初始化

主要對類變量進行初始化,執(zhí)行類構(gòu)造器的過程,換句話說,只對static修試的變量或者語句進行初始化。

范例:Person person = new Person();為例進行說明。

Java編程思想中的類的初始化過程主要有以下幾點:

找到class文件,將它加載到內(nèi)存

在堆內(nèi)存中分配內(nèi)存地址

初始化

將堆內(nèi)存地址指給棧內(nèi)存中的p變量

2、String、StringBuilder、StringBuffer

StringBuffer里面的很多方法添加了synchronized關(guān)鍵字,是可以表征線程安全的,所以多線程情況下使用它。

執(zhí)行速度:

StringBuilder > StringBuffer > String

StringBuilder犧牲了性能來換取速度的,這兩個是可以直接在原對象上面進行修改,省去了創(chuàng)建新對象和回收老對象的過程,而String是字符串常量(final)修試,另外兩個是字符串變量,常量對象一旦創(chuàng)建就不可以修改,變量是可以進行修改的,所以對于String字符串的操作包含下面三個步驟:

1、創(chuàng)建一個新對象,名字和原來的一樣

2、在新對象上面進行修改

3、原對象被垃圾回收掉

3、JVM內(nèi)存結(jié)構(gòu)

Java對象實例化過程中,主要使用到虛擬機棧、Java堆和方法區(qū)。Java文件經(jīng)過編譯之后首先會被加載到j(luò)vm方法區(qū)中,jvm方法區(qū)中很重的一個部分是運行時常量池,用以存儲class文件類的版本、字段、方法、接口等描述信息和編譯期間的常量和靜態(tài)常量。

3.1、JVM基本結(jié)構(gòu)

類加載器classLoader,在JVM啟動時或者類運行時將需要的.class文件加載到內(nèi)存中。

執(zhí)行引擎,負(fù)責(zé)執(zhí)行class文件中包含的字節(jié)碼指令。

本地方法接口,主要是調(diào)用C/C++實現(xiàn)的本地方法及返回結(jié)果。

內(nèi)存區(qū)域(運行時數(shù)據(jù)區(qū)),是在JVM運行的時候操作所分配的內(nèi)存區(qū),

主要分為以下五個部分,如下圖:


方法區(qū):用于存儲類結(jié)構(gòu)信息的地方,包括常量池、靜態(tài)變量、構(gòu)造函數(shù)等。

Java堆(heap):存儲Java實例或者對象的地方。這塊是gc的主要區(qū)域。

Java棧(stack):Java??偸呛途€程關(guān)聯(lián)的,每當(dāng)創(chuàng)建一個線程時,JVM就會為這個線程創(chuàng)建一個對應(yīng)的Java棧。在這個java棧中又會包含多個棧幀,每運行一個方法就創(chuàng)建一個棧幀,用于存儲局部變量表、操作棧、方法返回值等。每一個方法從調(diào)用直至執(zhí)行完成的過程,就對應(yīng)一個棧幀在java棧中入棧到出棧的過程。所以java棧是線程私有的。

程序計數(shù)器:用于保存當(dāng)前線程執(zhí)行的內(nèi)存地址,由于JVM是多線程執(zhí)行的,所以為了保證線程切換回來后還能恢復(fù)到原先狀態(tài),就需要一個獨立的計數(shù)器,記錄之前中斷的地方,可見程序計數(shù)器也是線程私有的。

本地方法棧:和Java棧的作用差不多,只不過是為JVM使用到的native方法服務(wù)的。

3.2、JVM源碼分析

原文鏈接:https://blog.csdn.net/xiangzhihong8/java/article/details/96280254

點擊下方鏈接免費獲取Android進階資料:

https://shimo.im/docs/tXXKHgdjPYj6WT8d/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容