Java虛擬機(jī)是如何判定熱點(diǎn)代碼的?
Java虛擬機(jī)判定熱點(diǎn)代碼的方式有兩種:
基于采樣的熱點(diǎn)判定:主要是虛擬機(jī)會(huì)周期性的檢查各個(gè)線程的棧頂,若某個(gè)或某些方法經(jīng)常出現(xiàn)在棧頂,那這個(gè)方法就是“熱點(diǎn)方法”。這種判定方式的優(yōu)點(diǎn)是實(shí)現(xiàn)簡(jiǎn)單;缺點(diǎn)是很難精確一個(gè)方法的熱度,容易受到線程阻塞或外界因素的影響。
基于計(jì)數(shù)器的熱點(diǎn)判定:主要就是虛擬機(jī)給每一個(gè)方法甚至代碼塊建立了一個(gè)計(jì)數(shù)器,統(tǒng)計(jì)方法的執(zhí)行次數(shù),超過(guò)一定的閥值則標(biāo)記為此方法為熱點(diǎn)方法。
Hotspot虛擬機(jī)使用的基于計(jì)數(shù)器的熱點(diǎn)探測(cè)方法。它使用了兩類計(jì)數(shù)器:方法調(diào)用計(jì)數(shù)器和回邊計(jì)數(shù)器,當(dāng)?shù)竭_(dá)一定的閥值是就會(huì)觸發(fā)JIT編譯。
方法調(diào)用計(jì)數(shù)器:在client模式下的閥值是1500次,Server是10000次,可以通過(guò)虛擬機(jī)參數(shù):-XX:CompileThreshold=N對(duì)其進(jìn)行設(shè)置。但是JVM還存在熱度衰減,時(shí)間段內(nèi)調(diào)用方法的次數(shù)較少,計(jì)數(shù)器就減小?;剡呌?jì)數(shù)器:主要統(tǒng)計(jì)的是方法中循環(huán)體代碼執(zhí)行的次數(shù)。
以下Integer代碼輸出的結(jié)果是?
答:true,false題目解析:此道題目考察的是,面試者對(duì)于基礎(chǔ)類型高頻區(qū)緩存的掌握,因?yàn)镮nteger的高頻區(qū)的取值是-128-127,所以在這個(gè)區(qū)間的值會(huì)復(fù)用已有的緩存,對(duì)比的結(jié)果自然是true,false。
有哪些方法可以解決哈希沖突?
答:哈希沖突的常用解決方案有以下4種:
開(kāi)放定址法:當(dāng)關(guān)鍵字的哈希地址p=H(key)出現(xiàn)沖突時(shí),以p為基礎(chǔ),產(chǎn)生另一個(gè)哈希地址p1,如果p1仍然沖突,再以p為基礎(chǔ),產(chǎn)生另一個(gè)哈希地址p2,循環(huán)此過(guò)程直到找出一個(gè)不沖突的哈希地址,將相應(yīng)元素存入其中;
再哈希法:這種方法是同時(shí)構(gòu)造多個(gè)不同的哈希函數(shù),當(dāng)哈希地址Hi=RH1(key)發(fā)生沖突時(shí),再計(jì)算Hi=RH2(key),循環(huán)此過(guò)程直到找到一個(gè)不沖突的哈希地址,這種方法唯一的缺點(diǎn)就是增加了計(jì)算時(shí)間;
鏈地址法:這種方法的基本思想是將所有哈希地址為i的元素構(gòu)成一個(gè)稱為同義詞鏈的單鏈表,并將單鏈表的頭指針存在哈希表的第i個(gè)單元中,因而查找、插入和刪除主要在同義詞鏈中進(jìn)行。鏈地址法適用于經(jīng)常進(jìn)行插入和刪除的情況;
建立公共溢出區(qū):將哈希表分為基本表和溢出表兩部分,凡是和基本表發(fā)生沖突的元素,一律填入溢出表。
JVM內(nèi)存布局是怎樣的?
答:不同虛擬機(jī)實(shí)現(xiàn)可能略微有所不同,但都會(huì)遵從Java虛擬機(jī)規(guī)范,Java8虛擬機(jī)規(guī)范規(guī)定,Java虛擬機(jī)所管理的內(nèi)存將會(huì)包括以下幾個(gè)區(qū)域:
程序計(jì)數(shù)器(ProgramCounterRegister)
Java虛擬機(jī)棧(JavaVirtualMachineStacks)
本地方法棧(NativeMethodStack)
Java堆(JavaHeap)
方法區(qū)(MethedArea)
以下StringBuffer傳值修改后的執(zhí)行結(jié)果是什么?
答:hilaowang題目解析:String為不可變類型,在方法內(nèi)對(duì)String修改的時(shí)候,相當(dāng)修改傳遞過(guò)來(lái)的是一個(gè)String副本,所以String本身的值是不會(huì)被修改的,而StringBuffer為可變類型,傳遞過(guò)來(lái)的參數(shù)相當(dāng)于對(duì)象本身,所以打印的結(jié)果就為hilaowang。
以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“2020年精選Java面試題目”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
Java面試題