大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 職業(yè)指南 Java類加載機(jī)制面試題的六個(gè)常見問題

Java類加載機(jī)制面試題的六個(gè)常見問題

更新時(shí)間:2022-12-13 14:51:38 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1225次

Java面試題中被經(jīng)常問到的問題就是java類加載機(jī)制面試題了,或者是讓你通過一個(gè)程序員,回答程序的輸出步驟與結(jié)果是怎樣的,這些知識(shí)點(diǎn)都是與java類加載有關(guān)系的,所以我們掌握了java類加載機(jī)制面試題能夠讓面試更加的輕松應(yīng)答:

java類加載機(jī)制面試題

1.Java什么時(shí)候把類加載到內(nèi)存?

Java虛擬機(jī)規(guī)范中并沒有進(jìn)行強(qiáng)制約束,這點(diǎn)可以交給虛擬機(jī)的具體實(shí)現(xiàn)來自由把握。但是對(duì)于初始化階段,虛擬機(jī)規(guī)范則是嚴(yán)格規(guī)定了有且只有5種情況必須立即對(duì)類進(jìn)行“初始化”,而加載、驗(yàn)證、準(zhǔn)備自然需要在此之前開始。

1.使用new關(guān)鍵字實(shí)例化對(duì)象的時(shí)候、讀取或設(shè)置一個(gè)類的靜態(tài)字段(被final修飾、已在編譯期把結(jié)果放入常量池的靜態(tài)字段除外)的時(shí)候,以及調(diào)用一個(gè)類的靜態(tài)方法的時(shí)候

2.使用java.lang.reflect包的方法對(duì)類進(jìn)行反射調(diào)用的時(shí)候

3.當(dāng)初始化一個(gè)類的時(shí)候,如果發(fā)現(xiàn)其父類還沒有進(jìn)行過初始化

4.當(dāng)虛擬機(jī)啟動(dòng)時(shí),用戶需要指定一個(gè)要執(zhí)行的主類(包含main()方法的那個(gè)類),虛擬機(jī)會(huì)先初始化這個(gè)主類。

5.當(dāng)使用JDK 1.7的動(dòng)態(tài)語言支持時(shí),如果一個(gè)java.lang.invoke.MethodHandle實(shí)例最后的解析結(jié)果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且這個(gè)方法句柄所對(duì)應(yīng)的類沒有進(jìn)行過初始化,則需要先觸發(fā)其初始化。

Java虛擬機(jī)有預(yù)加載功能。類加載器并不需要等到某個(gè)類被"首次主動(dòng)使用"時(shí)再加載它,JVM規(guī)范規(guī)定JVM可以預(yù)測加載某一個(gè)類,如果這個(gè)類出錯(cuò),但是應(yīng)用程序沒有調(diào)用這個(gè)類, JVM也不會(huì)報(bào)錯(cuò);如果調(diào)用這個(gè)類的話,JVM才會(huì)報(bào)錯(cuò)。

2.加載階段做了什么?

將類的class文件讀入到內(nèi)存,并創(chuàng)建一個(gè)java.lang.Class對(duì)象的過程,具體包括以下三個(gè)階段:

  • 通過一個(gè)類的全限定名獲取定義此類的二進(jìn)制字節(jié)流
  • 將這個(gè)字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)(.class)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)
  • 在Java堆中生成一個(gè)代表這個(gè)類的java.lang.Class對(duì)象,作為對(duì)方法區(qū)中這些數(shù)據(jù)的訪問入口

3.class文件信息都包括什么?

包括類的版本、字段、方法、接口等描述信息,以及常量池(constant pool table),用于存放編譯器生成的各種字面量(Literal)和符號(hào)引用(Symbolic References);每個(gè)class文件都有一個(gè)class常量池。當(dāng)java文件被編譯成class文件之后,也就是會(huì)生成我上面所說的class常量池。

4.class常量池和運(yùn)行時(shí)常量池區(qū)別是什么?

當(dāng)類加載到內(nèi)存中后,jvm就會(huì)將class常量池中的內(nèi)容存放到運(yùn)行時(shí)常量池中,運(yùn)行時(shí)常量池每個(gè)類都有一個(gè)。class常量池中存的是字面量和符號(hào)引用,并不是對(duì)象的實(shí)例,而是對(duì)象的符號(hào)引用值。而經(jīng)過解析(resolve)之后,也就是把符號(hào)引用替換為直接引用,解析的過程會(huì)去查詢?nèi)肿址兀员WC運(yùn)行時(shí)常量池所引用的字符串與全局字符串常量池中所引用的是一致的。

全局字符串池里的內(nèi)容是在類加載完成,經(jīng)過驗(yàn)證,準(zhǔn)備階段之后在堆中生成字符串對(duì)象實(shí)例,然后將該字符串對(duì)象實(shí)例的引用值存到string pool中(記住:string pool中存的是引用值而不是具體的實(shí)例對(duì)象,具體的實(shí)例對(duì)象是在堆中開辟的一塊空間存放的)。

5.驗(yàn)證階段有什么用?

因?yàn)閏lass文件可能會(huì)被中途改動(dòng),或者來自有惡意的編譯器,因此需要進(jìn)行驗(yàn)證,避免非法的class文件危害虛擬機(jī)自身的安全。

具體包括以下四個(gè)階段:

  • 文件格式驗(yàn)證,包括版本號(hào)是否匹配,常量池中的常量類型,指向常量的索引值是否指向了不存在的常量或不符合類型的常量。
  • 元數(shù)據(jù)驗(yàn)證,進(jìn)行語義分析,包括是否有父類,是否可以繼承(final不允許繼承),子類是否實(shí)現(xiàn)了所有的抽象方法等
  • 字節(jié)碼驗(yàn)證,最復(fù)雜的階段,通過數(shù)據(jù)流和控制流的分析,對(duì)類的方法體進(jìn)行校驗(yàn)分析,包括操作數(shù)棧使用時(shí)類型是否匹配,類型轉(zhuǎn)換是否正確等等。
  • 符號(hào)引用驗(yàn)證,發(fā)生在虛擬機(jī)將符號(hào)引用轉(zhuǎn)化為直接引用的時(shí)候(在解析時(shí)發(fā)生),包括符號(hào)引用是否有對(duì)應(yīng)類、方法和字段,是否可以被當(dāng)前類訪問等。

6.驗(yàn)證階段必須執(zhí)行嗎

在生產(chǎn)階段可以考慮關(guān)閉 -Xverify:none 以此來縮短類加載時(shí)間。

以上就是“Java類加載機(jī)制面試題的六個(gè)常見問題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 国产亚洲精品久久久久久小说 | 亚欧在线精品免费观看一区 | 成人亚洲在线 | 人人爱人人草 | 久久天天躁狠狠躁夜夜中文字幕 | 久久国产免费福利资源网站 | 国产在线观看精品香蕉v区 国产在线观看美女福利精 国产在线观看午夜不卡 | 99久热只有精品视频免费看 | 久久日本精品国产精品白 | 九九久久精品国产 | 极品欧美人体xxxxoo | 国产亚洲精品自在久久77 | 国产精品福利在线观看入口 | 欧美一级www毛片 | 国产网红福利视频网站 | 亚洲国产人成在线观看69网站 | 欧美男女啪啪 | 奇米影视111| 99爱在线精品视频网站 | 国产一区视频在线免费观看 | 亚洲黄色小视频 | 国产在线成人一区二区 | 91探花视频在线观看 | 夜夜骑天天操 | 337p欧洲亚洲大胆艺术 | 2020国产免费久久精品99 | 国产四虎精品 | 欧美国产亚洲精品高清不卡 | 成人黄色一级毛片 | 国产永久在线观看 | 亚洲另类精品综合 | 激情综合婷婷亚洲图片 | 色婷婷狠狠久久综合五月 | 久久久久久久国产精品 | 亚洲一区二区欧美 | 国产不卡免费 | 国产精品 视频一区 二区三区 | 99re8热精品免费视频 | 欧美一级aa免费毛片 | 亚洲欧美在线中文字幕不卡 | 亚洲精品久久一区影院 |