在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    10道不得不會(huì)的JVM面試題 看完對(duì)你有不少的幫助

    10道不得不會(huì)的JVM面試題 看完對(duì)你有不少的幫助

    JVM

    基于JDK8

    1. 說(shuō)一說(shuō)JVM的主要組成部分

    • 方法區(qū)和堆是所有線程共享的內(nèi)存區(qū)域;而虛擬機(jī)棧、本地方法棧和程序計(jì)數(shù)器的運(yùn)行是線程私有的內(nèi)存區(qū)域,運(yùn)行時(shí)數(shù)據(jù)區(qū)域就是我們常說(shuō)的JVM的內(nèi)存。
    • 加載子系統(tǒng):根據(jù)給定的全限定名類名(如:java.lang.Object)來(lái)裝載class文件到運(yùn)行時(shí)數(shù)據(jù)區(qū)中的方法區(qū)中。
    • Java堆是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊,也是垃圾回收的主要區(qū)域。Java堆是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對(duì)象實(shí)例,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存。
    • 方法區(qū)與Java堆一樣,是各個(gè)線程共享的內(nèi)存區(qū)域,它用于存儲(chǔ)已被虛擬機(jī)加載的類信息、常量、靜態(tài)變量、即時(shí)編譯器編譯后的代碼等數(shù)據(jù)。
    • 程序計(jì)數(shù)器是一塊較小的內(nèi)存空間,它的作用可以看做是當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器,用來(lái)指示執(zhí)行引擎下一條執(zhí)行指令的地址。
    • Java虛擬機(jī)棧也是線程私有的,它的生命周期與線程相同。虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法被執(zhí)行的時(shí)候都會(huì)同時(shí)創(chuàng)建一個(gè)棧幀(Stack Frame)用于存儲(chǔ)局部變量表、操作數(shù)棧、動(dòng)態(tài)鏈接、返回方法地址等信息。每一個(gè)方法被調(diào)用直至執(zhí)行完成的過(guò)程,就對(duì)應(yīng)著一個(gè)棧幀在虛擬機(jī)棧中從入棧到出棧的過(guò)程。
    • 本地方法棧(Native Method Stacks),本地方法棧(Native Method Stacks)與虛擬機(jī)棧所發(fā)揮的作用是非常相似的,其區(qū)別不過(guò)是虛擬機(jī)棧為虛擬機(jī)執(zhí)行Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧則是為虛擬機(jī)使用到的Native方法服務(wù)。
    • 執(zhí)行引擎:根據(jù)程序計(jì)數(shù)器中存儲(chǔ)的指令地址執(zhí)行classes中的指令。
    • 本地接口:與本地方法庫(kù)交互,是其它編程語(yǔ)言交互的接口。

    2. 說(shuō)一下 JVM 的作用?

    首先通過(guò)編譯器把 Java 代碼轉(zhuǎn)換成字節(jié)碼,類加載器(ClassLoader)再把字節(jié)碼加載到內(nèi)存中,將其放在運(yùn)行時(shí)數(shù)據(jù)區(qū)(Runtime data area)的方法區(qū)內(nèi),而字節(jié)碼文件只是 JVM 的一套指令集規(guī)范,并不能直接交給底層操作系統(tǒng)去執(zhí)行,因此需要特定的命令解析器執(zhí)行引擎(Execution Engine),將字節(jié)碼翻譯成底層系統(tǒng)指令,再交由 CPU 去執(zhí)行,而這個(gè)過(guò)程中需要調(diào)用其他語(yǔ)言的本地庫(kù)接口(Native Interface)來(lái)實(shí)現(xiàn)整個(gè)程序的功能。

    3. 說(shuō)一下堆棧的區(qū)別?

    物理地址

    堆的物理地址分配對(duì)象是不連續(xù)的。因此性能慢些。在GC的時(shí)候也要考慮到不連續(xù)的分配,所以有各種算法。比如,標(biāo)記-消除,復(fù)制,標(biāo)記-壓縮,分代(即新生代使用復(fù)制算法,老年代使用標(biāo)記——壓縮)

    棧使用的是數(shù)據(jù)結(jié)構(gòu)中的棧,先進(jìn)后出的原則,物理地址分配是連續(xù)的。所以性能快。

    內(nèi)存分別

    堆因?yàn)槭遣贿B續(xù)的,所以分配的內(nèi)存是在運(yùn)行期確認(rèn)的,因此大小不固定。一般堆大小遠(yuǎn)遠(yuǎn)大于棧。

    棧是連續(xù)的,所以分配的內(nèi)存大小要在編譯期就確認(rèn),大小是固定的。

    存放的內(nèi)容

    堆存放的是對(duì)象的實(shí)例和數(shù)組。因此該區(qū)更關(guān)注的是數(shù)據(jù)的存儲(chǔ)

    棧存放:局部變量,操作數(shù)棧,返回結(jié)果。該區(qū)更關(guān)注的是程序方法的執(zhí)行。

    PS:

    靜態(tài)變量放在方法區(qū) 靜態(tài)的對(duì)象還是放在堆。 程序的可見(jiàn)度

    堆對(duì)于整個(gè)應(yīng)用程序都是共享、可見(jiàn)的。

    棧只對(duì)于線程是可見(jiàn)的。所以也是線程私有。他的生命周期和線程相同。

    4. Java內(nèi)存泄漏

    內(nèi)存泄漏是指不再被使用的對(duì)象或者變量一直被占據(jù)在內(nèi)存中。

    嚴(yán)格來(lái)說(shuō),只有對(duì)象不會(huì)再被程序用到了,但是GC又不能回收他們的情況,才叫內(nèi)存泄漏。

    理論上來(lái)說(shuō),Java是有GC垃圾回收機(jī)制的,也就是說(shuō),不再被使用的對(duì)象,會(huì)被GC自動(dòng)回收掉,自動(dòng)從內(nèi)存中清除。

    但是,即使這樣,Java也還是存在著內(nèi)存泄漏的情況,java導(dǎo)致內(nèi)存泄露的原因很明確:長(zhǎng)生命周期的對(duì)象持有短生命周期對(duì)象的引用就很可能發(fā)生內(nèi)存泄露,盡管短生命周期對(duì)象已經(jīng)不再需要,但是因?yàn)殚L(zhǎng)生命周期對(duì)象持有它的引用而導(dǎo)致不能被回收,這就是java中內(nèi)存泄露的發(fā)生場(chǎng)景。

    5. JVM 有哪些垃圾回收算法?

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

    6. 說(shuō)一下 JVM 有哪些垃圾回收器?

    7. 說(shuō)一下類加載的執(zhí)行過(guò)程?

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

    8. 什么是雙親委派模型?為什么要使用雙親委派模型?

    什么是雙親委派模型

    • 當(dāng)需要加載一個(gè)類的時(shí)候,子類加載器并不會(huì)馬上去加載,而是依次去請(qǐng)求父類加載器加載
    • 如果父類加載器還存在其父類加載器,則進(jìn)一步向上委托,依次遞歸,請(qǐng)求最終將到達(dá)頂層的啟動(dòng)類加載器;
    • 如果父類加載器可以完成類加載任務(wù),就成功返回,倘若父類加載器無(wú)法完成此加載任務(wù),子加載器才會(huì)嘗試自己去加載,這就是雙親委派模式。

    為什么要使用雙親委派模型

    可以防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼,如果沒(méi)有雙親委派模型而是由各個(gè)類加載器自行加載的話,如果用戶編寫了一個(gè)java.lang.Object的同名類并放在ClassPath中,多個(gè)類加載器都去加載這個(gè)類到內(nèi)存中,系統(tǒng)中將會(huì)出現(xiàn)多個(gè)不同的Object類,那么類之間的比較結(jié)果及類的唯一性將無(wú)法保證,而且如果不使用這種雙親委派模型將會(huì)給虛擬機(jī)的安全帶來(lái)隱患。所以,要讓類對(duì)象進(jìn)行比較有意義,前提是他們要被同一個(gè)類加載器加載。

    9. CMS垃圾清理的過(guò)程

    CMS整個(gè)過(guò)程比之前的收集器要復(fù)雜,整個(gè)過(guò)程分為4個(gè)主要階段,即初始標(biāo)記階段、并發(fā)標(biāo)記階段、重新標(biāo)記階段和并發(fā)清除階段。(涉及STW的階段主要是:初始標(biāo)記 和 重新標(biāo)記 stop-the-world)

    • 初始標(biāo)記(Initial-Mark)階段:在這個(gè)階段中,程序中所有的工作線程都將會(huì)因?yàn)椤皊top-the-world”機(jī)制而出現(xiàn)短暫的暫停,這個(gè)階段的主要任務(wù)僅僅只是標(biāo)記出 GC Roots 能直接關(guān)聯(lián)到的對(duì)象。一旦標(biāo)記完成之后就會(huì)恢復(fù)之前被暫停的所有應(yīng)用線程。由于直接關(guān)聯(lián)對(duì)象比較小,所以這里的速度非??臁?/li>
    • 并發(fā)標(biāo)記(Concurrent-Mark)階段:從 Gc Roots 的直接關(guān)聯(lián)對(duì)象開始遍歷整個(gè)對(duì)象圖的過(guò)程,這個(gè)過(guò)程耗時(shí)較長(zhǎng)但是不需要停頓用戶線程,可以與垃圾收集線程一起并發(fā)運(yùn)行。
    • 重新標(biāo)記(Remark)階段:由于在并發(fā)標(biāo)記階段中,程序的工作線程會(huì)和垃圾收集線程同時(shí)運(yùn)行或者交叉運(yùn)行,因此為了修正并發(fā)標(biāo)記期間,因用戶程序繼續(xù)運(yùn)作而導(dǎo)致標(biāo)記產(chǎn)生變動(dòng)的那一部分對(duì)象的標(biāo)記記錄,這個(gè)階段的停頓時(shí)間通常會(huì)比初始標(biāo)記階段稍長(zhǎng)一些,但也遠(yuǎn)比并發(fā)標(biāo)記階段的時(shí)間短。
    • 并發(fā)清除(Concurrent-Sweep)階段:此階段清理刪除掉標(biāo)記階段判斷的已經(jīng)死亡的對(duì)象,釋放內(nèi)存空間。由于不需要移動(dòng)存活對(duì)象,所以這個(gè)階段也是可以與用戶線程同時(shí)并發(fā)的

    10. 常用的 JVM 調(diào)優(yōu)的參數(shù)都有哪些?

    • -XX:NewRatio=4:設(shè)置年輕的和老年代的內(nèi)存比例為 1:4;
    • -XX:SurvivorRatio=8:設(shè)置新生代 Eden 和 Survivor 比例為 8:2;
    • –XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器組合;
    • -XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器組合;
    • -XX:+UseConcMarkSweepGC:指定使用 CMS + Serial Old 垃圾回收器組合;
    • -XX:+PrintGC:開啟打印 gc 信息;
    • -XX:+PrintGCDetails:打印 gc 詳細(xì)信息。
    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年6月23日 06:32
    下一篇 2022年6月23日 06:32

    相關(guān)推薦

    • 伊朗補(bǔ)時(shí)最后時(shí)刻連進(jìn)兩球,2比0擊敗威爾士

      亞洲球隊(duì)的頑強(qiáng)仍在繼續(xù)!25日晚間,首戰(zhàn)以2比6敗北的伊朗隊(duì),與威爾士隊(duì)激戰(zhàn)超過(guò)100分鐘,并在超長(zhǎng)補(bǔ)時(shí)的最后階段攻入兩球,最終2比0擊敗威爾士隊(duì)。 全場(chǎng)比賽,伊朗隊(duì)的攻勢(shì)都要比威…

      2022年11月27日
    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應(yīng)該怎么發(fā))

      對(duì)于微商朋友來(lái)說(shuō),朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營(yíng)一個(gè)朋友圈,有的微商看起來(lái)逼格滿滿,實(shí)際效果也不錯(cuò);而有的卻動(dòng)都不動(dòng)就被屏蔽甚至拉黑…

      2022年11月27日
    • 筆記本最好配置(目前筆記本最好的配置)

      本文主要講的是筆記本最好配置,以及和目前筆記本最好的配置相關(guān)的知識(shí),如果覺(jué)得本文對(duì)您有所幫助,不要忘了將本文分享給朋友。 筆記本電腦什么配置好? 01 CPU:這個(gè)主要取決于頻率和…

      2022年11月26日
    • 《寶可夢(mèng)朱紫》夢(mèng)特性怎么獲得?隱藏特性獲取方法推薦

      寶可夢(mèng)朱紫里有很多寶可夢(mèng)都是擁有夢(mèng)特性會(huì)變強(qiáng)的寶可夢(mèng),很多玩家不知道夢(mèng)特性怎么獲得,下面就給大家?guī)?lái)寶可夢(mèng)朱紫隱藏特性獲取方法推薦,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 《寶可夢(mèng)朱紫》奇魯莉安怎么進(jìn)化?奇魯莉安進(jìn)化方法分享

      寶可夢(mèng)朱紫中的奇魯莉安要怎么進(jìn)化呢?很多玩家都不知道,下面就給大家?guī)?lái)寶可夢(mèng)朱紫奇魯莉安進(jìn)化方法分享,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 奇魯莉安進(jìn)化方法分享 奇魯莉安…

      2022年11月25日
    • 百度關(guān)鍵詞快速排名的4大原理解析(百度怎么刷關(guān)鍵詞)

      近期百度公告驚雷算法2.0,升級(jí)之快還是第一次吧,看來(lái)百度對(duì)于刷點(diǎn)擊行為是零容忍了。之前尹華峰SEO技術(shù)博客介紹過(guò)一篇如何使用刷點(diǎn)擊工具,其實(shí)市面上有很多這類SEO快速排名的軟件,…

      2022年11月25日
    • cpu性能天梯圖2022 AMD CPU天梯圖最新排行榜出爐

      用戶在DIY自己的主機(jī)時(shí)選擇CPU是非常關(guān)鍵的,CPU可以說(shuō)是電腦的大腦,大家也都想追求好一點(diǎn)的CPU來(lái)使用,但型號(hào)太多了,大部分的用戶都不知道目前哪一款CPU比較好用,快來(lái)看看詳…

      2022年11月24日
    • 《寶可夢(mèng)朱紫》暴飛龍?jiān)趺醋??暴飛龍獲得方法

      寶可夢(mèng)朱紫暴飛龍位置在哪?在游戲中,很多玩家還不清楚暴飛龍具體要怎么樣獲得,其實(shí)獲得方法很簡(jiǎn)單,暴飛龍直接是沒(méi)得抓的,需要玩家從寶貝龍進(jìn)化得到,下面一起來(lái)看一下寶可夢(mèng)朱紫暴飛龍獲得…

      2022年11月23日
    • 《寶可夢(mèng)朱紫》布土撥怎么進(jìn)化?布土撥進(jìn)化方法介紹

      寶可夢(mèng)朱紫中,不同的寶可夢(mèng)有不同的進(jìn)化方法,其中布土撥的進(jìn)化方法是比較特殊的。很多玩家不知道寶可夢(mèng)朱紫布土撥怎么進(jìn)化,下面就帶來(lái)寶可夢(mèng)朱紫布土撥進(jìn)化方法介紹,一起來(lái)看看吧,希望能幫…

      2022年11月23日
    • 《寶可夢(mèng)朱紫》薄荷怎么獲得?薄荷獲得方法

      寶可夢(mèng)朱紫中薄荷有改變寶可夢(mèng)的屬性或性格等效果,很多玩家想知道寶可夢(mèng)朱紫薄荷怎么獲得,下面就帶來(lái)寶可夢(mèng)朱紫薄荷獲得方法,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 薄荷獲得方法…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息