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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 職業(yè)指南 需要被我們記住的jvm調(diào)優(yōu)面試題

需要被我們記住的jvm調(diào)優(yōu)面試題

更新時(shí)間:2023-01-10 14:45:40 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1536次

說道jvm調(diào)優(yōu)必定是我們?cè)诿嬖嚦绦騿T的時(shí)候被問到的問題,畢竟我們?cè)诠ぷ髦谐?huì)用到Java虛擬機(jī),所以,面試Java相關(guān)崗位的時(shí)候Jvm幾乎是必問的,所以,這幾點(diǎn)到j(luò)vm調(diào)優(yōu)面試題希望可以幫助到大家:

jvm調(diào)優(yōu)面試題

1、說一下JVM的主要組成部分?及其作用?

class loader 類加載器:加載類文件到內(nèi)存。Class loader只管加載,只要符合文件結(jié)構(gòu)就加載,至于能否運(yùn)行,它不負(fù)責(zé),那是有Exectution Engine負(fù)責(zé)的。

exection engine :執(zhí)行引擎也叫解釋器,負(fù)責(zé)解釋命令,交由操作系統(tǒng)執(zhí)行。

native interface:本地接口。本地接口的作用是融合不同的語(yǔ)言為java所用。

Runtimedata area 運(yùn)行數(shù)據(jù)區(qū):運(yùn)行數(shù)據(jù)區(qū)是jvm的重點(diǎn),我們所有所寫的程序都被加載到這里,之后才開始運(yùn)行。

stack:棧也叫棧內(nèi)存,是java程序的運(yùn)行區(qū),是在線程創(chuàng)建時(shí)創(chuàng)建,它的生命周期跟隨線程的生命周期,線程結(jié)束棧內(nèi)存釋放;對(duì)于棧來說不存在垃圾回收的問題,只要線程一結(jié)束,該棧就結(jié)束。棧中的數(shù)據(jù)以棧幀的格式存在,棧幀是一個(gè)內(nèi)存區(qū)塊,是一個(gè)數(shù)據(jù)集,是一個(gè)有關(guān)方法和運(yùn)行期數(shù)據(jù)的集合,當(dāng)一個(gè)方法A被調(diào)用時(shí)就產(chǎn)生了一個(gè)棧幀F(xiàn)1,并被壓入到棧中,A方法又調(diào)用了B方法,于是產(chǎn)生棧幀F(xiàn)2也被壓入棧,執(zhí)行完畢后,先彈出F2棧幀,再?gòu)棾鯢1棧幀,遵循“先進(jìn)后出”原則。

堆內(nèi)存:一個(gè)JVM實(shí)例只存在一個(gè)堆內(nèi)存,堆內(nèi)存的大小是可以調(diào)節(jié)的。類的加載器讀取了類文件之后,需要把類、方法、常變量放到堆內(nèi)存中,以方便執(zhí)行器執(zhí)行,堆內(nèi)存分三部分:永久存儲(chǔ)(用于存放jdk自身攜帶的class,interface的元數(shù)據(jù),也就是說它存儲(chǔ)的是運(yùn)行環(huán)境必須的類信息,被裝載至此區(qū)域的數(shù)據(jù)是不會(huì)被垃圾回收掉的,只有關(guān)閉jvm釋放此區(qū)域所占用的內(nèi)存)區(qū)、新生區(qū)、老年代

method area方法區(qū):方法去是被所有線程共享,該區(qū)域保存的所有字段和字節(jié)方法碼以及一些特殊方法如構(gòu)造函數(shù),接口代碼也在此定義。

PC Register 程序計(jì)數(shù)器:每個(gè)線程都有一個(gè)程序計(jì)數(shù)器,就是一個(gè)指針,指向方法區(qū)中的方法字節(jié)碼,由執(zhí)行引擎讀取下一條指令

2、說一下JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)?

不同虛擬機(jī)的運(yùn)行時(shí)數(shù)據(jù)區(qū)可能略微有所不同,但都會(huì)遵從 Java 虛擬機(jī)規(guī)范, Java 虛擬機(jī)規(guī)范規(guī)定的區(qū)域分為以下 5 個(gè)部分:

程序計(jì)數(shù)器(Program Counter Register):當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,字節(jié)碼解析器的工作是通過改變這個(gè)計(jì)數(shù)器的值,來選取下一條需要執(zhí)行的字節(jié)碼指令,分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能,都需要依賴這個(gè)計(jì)數(shù)器來完成;

Java 虛擬機(jī)棧(Java Virtual Machine Stacks):用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、方法出口等信息;

本地方法棧(Native Method Stack):與虛擬機(jī)棧的作用是一樣的,只不過虛擬機(jī)棧是服務(wù) Java 方法的,而本地方法棧是為虛擬機(jī)調(diào)用 Native 方法服務(wù)的;

Java 堆(Java Heap):Java 虛擬機(jī)中內(nèi)存最大的一塊,是被所有線程共享的,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存;

方法區(qū)(Methed Area):用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯后的代碼等數(shù)據(jù)。

3、隊(duì)列和棧是什么?有什么區(qū)別?

隊(duì)列和棧都是被用來預(yù)存儲(chǔ)數(shù)據(jù)的。隊(duì)列允許先進(jìn)先出檢索元素,但也有例外的情況,Deque 接口允許從兩端檢索元素。棧和隊(duì)列很相似,但它運(yùn)行對(duì)元素進(jìn)行后進(jìn)先出進(jìn)行檢索。

4、什么是雙親委派模型?

在介紹雙親委派模型之前先說下類加載器。對(duì)于任意一個(gè)類,都需要由加載它的類加載器和這個(gè)類本身一同確立在 JVM 中的唯一性,每一個(gè)類加載器,都有一個(gè)獨(dú)立的類名稱空間。類加載器就是根據(jù)指定全限定名稱將 class 文件加載到 JVM 內(nèi)存,然后再轉(zhuǎn)化為 class 對(duì)象。

類加載器分類:

啟動(dòng)類加載器(Bootstrap ClassLoader),是虛擬機(jī)自身的一部分,用來加載Java_HOME/lib/目錄中的,或者被 -Xbootclasspath 參數(shù)所指定的路徑中并且被虛擬機(jī)識(shí)別的類庫(kù);其他類加載器:擴(kuò)展類加載器(Extension ClassLoader):負(fù)責(zé)加載\lib\ext目錄或Java. ext. dirs系統(tǒng)變量指定的路徑中的所有類庫(kù);應(yīng)用程序類加載器(Application ClassLoader)。負(fù)責(zé)加載用戶類路徑(classpath)上的指定類庫(kù),我們可以直接使用這個(gè)類加載器。一般情況,如果我們沒有自定義類加載器默認(rèn)就是用這個(gè)加載器。雙親委派模型:如果一個(gè)類加載器收到了類加載的請(qǐng)求,它首先不會(huì)自己去加載這個(gè)類,而是把這個(gè)請(qǐng)求委派給父類加載器去完成,每一層的類加載器都是如此,這樣所有的加載請(qǐng)求都會(huì)被傳送到頂層的啟動(dòng)類加載器中,只有當(dāng)父加載無法完成加載請(qǐng)求(它的搜索范圍中沒找到所需的類)時(shí),子加載器才會(huì)嘗試去加載類。

5、說一下類裝載的執(zhí)行過程?

類裝載分為以下 5 個(gè)步驟:

加載:根據(jù)查找路徑找到相應(yīng)的 class 文件然后導(dǎo)入;檢查:檢查加載的 class 文件的正確性;準(zhǔn)備:給類中的靜態(tài)變量分配內(nèi)存空間;解析:虛擬機(jī)將常量池中的符號(hào)引用替換成直接引用的過程。符號(hào)引用就理解為一個(gè)標(biāo)示,而在直接引用直接指向內(nèi)存中的地址;初始化:對(duì)靜態(tài)變量和靜態(tài)代碼塊執(zhí)行初始化工作。

6、怎么判斷對(duì)象是否可以被回收?

一般有兩種方法來判斷:

引用計(jì)數(shù)器:為每個(gè)對(duì)象創(chuàng)建一個(gè)引用計(jì)數(shù),有對(duì)象引用時(shí)計(jì)數(shù)器 +1,引用被釋放時(shí)計(jì)數(shù) -1,當(dāng)計(jì)數(shù)器為 0 時(shí)就可以被回收。它有一個(gè)缺點(diǎn)不能解決循環(huán)引用的問題;可達(dá)性分析:從 GC Roots 開始向下搜索,搜索所走過的路徑稱為引用鏈。當(dāng)一個(gè)對(duì)象到 GC Roots 沒有任何引用鏈相連時(shí),則證明此對(duì)象是可以被回收的。

7、Java中都有哪些引用類型?

強(qiáng)引用:發(fā)生 gc 的時(shí)候不會(huì)被回收。軟引用:有用但不是必須的對(duì)象,在發(fā)生內(nèi)存溢出之前會(huì)被回收。弱引用:有用但不是必須的對(duì)象,在下一次GC時(shí)會(huì)被回收。虛引用(幽靈引用/幻影引用):無法通過虛引用獲得對(duì)象,用 PhantomReference 實(shí)現(xiàn)虛引用,虛引用的用途是在 gc 時(shí)返回一個(gè)通知。

8、說一下JVM有哪些垃圾回收算法?

標(biāo)記-清除算法:標(biāo)記無用對(duì)象,然后進(jìn)行清除回收。缺點(diǎn):效率不高,無法清除垃圾碎片。標(biāo)記-整理算法:標(biāo)記無用對(duì)象,讓所有存活的對(duì)象都向一端移動(dòng),然后直接清除掉端邊界以外的內(nèi)存。復(fù)制算法:按照容量劃分二個(gè)大小相等的內(nèi)存區(qū)域,當(dāng)一塊用完的時(shí)候?qū)⒒钪膶?duì)象復(fù)制到另一塊上,然后再把已使用的內(nèi)存空間一次清理掉。缺點(diǎn):內(nèi)存使用率不高,只有原來的一半。分代算法:根據(jù)對(duì)象存活周期的不同將內(nèi)存劃分為幾塊,一般是新生代和老年代,新生代基本采用復(fù)制算法,老年代采用標(biāo)記整理算法。

9、說一下JVM有哪些垃圾回收器?

Serial:最早的單線程串行垃圾回收器。

Serial Old:Serial 垃圾回收器的老年版本,同樣也是單線程的,可以作為 CMS 垃圾回收器的備選預(yù)案。

ParNew:是 Serial 的多線程版本。

Parallel 和 ParNew 收集器類似是多線程的,但 Parallel 是吞吐量?jī)?yōu)先的收集器,可以犧牲等待時(shí)間換取系統(tǒng)的吞吐量。

Parallel Old 是 Parallel 老生代版本,Parallel 使用的是復(fù)制的內(nèi)存回收算法,

Parallel Old 使用的是標(biāo)記-整理的內(nèi)存回收算法。

CMS:一種以獲得最短停頓時(shí)間為目標(biāo)的收集器,非常適用 B/S 系統(tǒng)。

G1:一種兼顧吞吐量和停頓時(shí)間的 GC 實(shí)現(xiàn),是 JDK 9 以后的默認(rèn) GC 選項(xiàng)。

以上就是“需要被我們記住的jvm調(diào)優(yōu)面試題”,你能回答上來嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。

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

  • 全國(guó)校區(qū) 2025-10-10 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 在线亚洲 欧美 日本专区 | 热思思久久 | 欧美一区视频 | 日本不卡免费高清一级视频 | 国产中文字幕在线免费观看 | 国产大尺度视频 | jiucao在线观看精品 | 综合啪啪 | 爱视频福利网 | 黄色直接观看 | 久久精品三级视频 | 久久成人免费观看全部免费 | 国产一级毛片午夜 | 国产亚洲欧美一区 | 美女网站色视频 | 一级毛片视频在线 | 麻豆精品一区二区三区免费 | 久久亚洲精品tv | 日韩欧美亚洲国产一区二区三区 | 操天天| 日日操操| 国产91精品福利在线观看 | 亚洲乱码在线视频 | 久久麻豆视频 | 久久精品亚洲日本筱田优 | 中文字幕国产在线 | 全亚洲最大的免费私人影剧院 | 欧美三级中文字幕 | 久久99热久久精品23 | 九九九久久久 | 四虎自拍 | 成年女人视频播放免费观看 | 日韩在线手机看片免费看 | 欧美亚洲三级 | 黄色免费网站在线观看 | 99精品国产第一福利网站 | 99久久国产综合色 | 成年香蕉大黄美女美女 | 久久精品爱 | 国产a久久精品一区二区三区 | 欧美日韩亚洲一区二区三区 |