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

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 職業(yè)指南 總會(huì)被問(wèn)到的jvm內(nèi)存模型面試題

總會(huì)被問(wèn)到的jvm內(nèi)存模型面試題

更新時(shí)間:2023-01-30 15:21:19 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1518次

JVM內(nèi)存模型

首先我們來(lái)了解一下JVM的內(nèi)存模型的怎么樣的:

1.堆:存放對(duì)象實(shí)例,幾乎所有的對(duì)象實(shí)例都在這里分配內(nèi)存

堆得內(nèi)存由-Xms指定,默認(rèn)是物理內(nèi)存的1/64;最大的內(nèi)存由-Xmx指定,默認(rèn)是物理內(nèi)存的1/4。

默認(rèn)空余的堆內(nèi)存小于40%時(shí),就會(huì)增大,直到-Xmx設(shè)置的內(nèi)存。具體的比例可以由-XX:MinHeapFreeRatio指定

空余的內(nèi)存大于70%時(shí),就會(huì)減少內(nèi)存,直到-Xms設(shè)置的大小。具體由-XX:MaxHeapFreeRatio指定。

2.虛擬機(jī)棧

虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型:每個(gè)方法被執(zhí)行的時(shí)候都會(huì)同時(shí)創(chuàng)建一個(gè)棧幀(Stack Frame)用于存儲(chǔ)局部變量表、操作棧、動(dòng)態(tài)鏈接、方法出口等信息本地方法棧:本地方法棧則是為虛擬機(jī)使用到的Native方法服務(wù)。

3.方法區(qū):存儲(chǔ)已被虛擬機(jī)加載的類元數(shù)據(jù)信息(元空間)

1)有時(shí)候也成為永久代,在該區(qū)內(nèi)很少發(fā)生垃圾回收,但是并不代表不發(fā)生GC,在這里進(jìn)行的GC主要是對(duì)方法區(qū)里的常量池和對(duì)類型的卸載

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

該區(qū)域是被線程共享的。

3)方法區(qū)里有一個(gè)運(yùn)行時(shí)常量池,用于存放靜態(tài)編譯產(chǎn)生的字面量和符號(hào)引用。該常量池具有動(dòng)態(tài)性,也就是說(shuō)常量并不一定是編譯時(shí)確定,運(yùn)行時(shí)生成的常量也會(huì)存在這個(gè)常量池中。

4.程序計(jì)數(shù)器:當(dāng)前線程所執(zhí)行的字節(jié)碼的行號(hào)指示器

JVM垃圾回收算法

1.標(biāo)記-清除: 這是垃圾收集算法中最基礎(chǔ)的,根據(jù)名字就可以知道,它的思想就是標(biāo)記哪些要被回收的對(duì)象,然后統(tǒng)一回收。這種方法很簡(jiǎn)單,但是會(huì)有兩個(gè)主要問(wèn)題:1.效率不高,標(biāo)記和清除的效率都很低;2.會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片,導(dǎo)致以后程序在分配較大的對(duì)象時(shí),由于沒(méi)有充足的連續(xù)內(nèi)存而提前觸發(fā)一次GC動(dòng)作。

2.復(fù)制算法: 為了解決效率問(wèn)題,復(fù)制算法將可用內(nèi)存按容量劃分為相等的兩部分,然后每次只使用其中的一塊,當(dāng)一塊內(nèi)存用完時(shí),就將還存活的對(duì)象復(fù)制到第二塊內(nèi)存上,然后一次性清楚完第一塊內(nèi)存,再將第二塊上的對(duì)象復(fù)制到第一塊。但是這種方式,內(nèi)存的代價(jià)太高,每次基本上都要浪費(fèi)一般的內(nèi)存。 于是將該算法進(jìn)行了改進(jìn),內(nèi)存區(qū)域不再是按照1:1去劃分,而是將內(nèi)存劃分為8:1:1三部分,較大那份內(nèi)存交Eden區(qū),其余是兩塊較小的內(nèi)存區(qū)叫Survior區(qū)。每次都會(huì)優(yōu)先使用Eden區(qū),若Eden區(qū)滿,就將對(duì)象復(fù)制到第二塊內(nèi)存區(qū)上,然后清除Eden區(qū),如果此時(shí)存活的對(duì)象太多,以至于Survivor不夠時(shí),會(huì)將這些對(duì)象通過(guò)分配擔(dān)保機(jī)制復(fù)制到老年代中。(java堆又分為新生代和老年代)

3. 標(biāo)記-整理 該算法主要是為了解決標(biāo)記-清除,產(chǎn)生大量?jī)?nèi)存碎片的問(wèn)題;當(dāng)對(duì)象存活率較高時(shí),也解決了復(fù)制算法的效率問(wèn)題。它的不同之處就是在清除對(duì)象的時(shí)候現(xiàn)將可回收對(duì)象移動(dòng)到一端,然后清除掉端邊界以外的對(duì)象,這樣就不會(huì)產(chǎn)生內(nèi)存碎片了。

4.分代收集 現(xiàn)在的虛擬機(jī)垃圾收集大多采用這種方式,它根據(jù)對(duì)象的生存周期,將堆分為新生代和老年代。在新生代中,由于對(duì)象生存期短,每次回收都會(huì)有大量對(duì)象死去,那么這時(shí)就采用復(fù)制算法。老年代里的對(duì)象存活率較高,沒(méi)有額外的空間進(jìn)行分配擔(dān)保,所以可以使用標(biāo)記-整理 或者 標(biāo)記-清除。

JVM垃圾收集器有哪些?以及優(yōu)劣勢(shì)比較?

1.串行Serial收集器

串行收集器是最簡(jiǎn)單的,它設(shè)計(jì)為在單核的環(huán)境下工作(32位或者windows),你幾乎不會(huì)使用到它。它在工作的時(shí)候會(huì)暫停整個(gè)應(yīng)用的運(yùn)行,因此在所有服務(wù)器環(huán)境下都不可能被使用。

使用方法:-XX:+UseSerialGC

2.并行Parallel收集器

這是JVM默認(rèn)的收集器,跟它名字顯示的一樣,它最大的優(yōu)點(diǎn)是使用多個(gè)線程來(lái)掃描和壓縮堆。缺點(diǎn)是在minor和full GC的時(shí)候都會(huì)暫停應(yīng)用的運(yùn)行。并行收集器最適合用在可以容忍程序停滯的環(huán)境使用,它占用較低的CPU因而能提高應(yīng)用的吞吐(throughput)。

使用方法:-XX:+UseParallelGC

3.CMS收集器

CMS是Concurrent-Mark-Sweep的縮寫,并發(fā)的標(biāo)記與清除。

這個(gè)算法使用多個(gè)線程并發(fā)地(concurrent)掃描堆,標(biāo)記不使用的對(duì)象,然后清除它們回收內(nèi)存。在兩種情況下會(huì)使應(yīng)用暫停(Stop the World, STW):

1. 當(dāng)初次開始標(biāo)記根對(duì)象時(shí)initial mark。

2. 當(dāng)在并行收集時(shí)應(yīng)用又改變了堆的狀態(tài)時(shí),需要它從頭再確認(rèn)一次標(biāo)記了正確的對(duì)象final remark。

這個(gè)收集器最大的問(wèn)題是在年輕代與老年代收集時(shí)會(huì)出現(xiàn)的一種競(jìng)爭(zhēng)情況(race condition),稱為提升失敗promotion failure。對(duì)象從年輕代復(fù)制到老年代稱為提升promotion,但有時(shí)侯老年代需要清理出足夠空間來(lái)放這些對(duì)象,這需要一定的時(shí)間,它收集的速度可能趕不上不斷產(chǎn)生的要提升的年輕代對(duì)象的速度,這時(shí)就需要做STW的收集。STW正是CMS想避免的問(wèn)題。為了避免這個(gè)問(wèn)題,需要增加老年代的空間大小或者增加更多的線程來(lái)做老年代的收集以趕上從年輕代復(fù)制對(duì)象的速度。

除了上文所說(shuō)的內(nèi)容之外,CMS最大的問(wèn)題就是內(nèi)存空間碎片化的問(wèn)題。CMS只有在觸發(fā)FullGC的情況下才會(huì)對(duì)堆空間進(jìn)行compact。如果線上應(yīng)用長(zhǎng)時(shí)間運(yùn)行,碎片化會(huì)非常嚴(yán)重,會(huì)很容易造成promotion failed。為了解決這個(gè)問(wèn)題線上很多應(yīng)用通過(guò)定期重啟或者手工觸發(fā)FullGC來(lái)觸發(fā)碎片整理。

對(duì)比并行收集器它的一個(gè)壞處是需要占用比較多的CPU。對(duì)于大多數(shù)長(zhǎng)期運(yùn)行的服務(wù)器應(yīng)用來(lái)說(shuō),這通常是值得的,因?yàn)樗粫?huì)導(dǎo)致應(yīng)用長(zhǎng)時(shí)間的停滯。但是它不是JVM的默認(rèn)的收集器。

4.G1收集器

如果你的堆內(nèi)存大于4G的話,那么G1會(huì)是要考慮使用的收集器。它是為了更好支持大于4G堆內(nèi)存引入的。

G1之前的JVM內(nèi)存模型

  • 新生代:伊甸園區(qū)(eden space) + 2個(gè)幸存區(qū)
  • 老年代
  • 持久代(perm space):JDK1.8之前
  • 元空間(metaspace):JDK1.8之后取代持久代

 以上就是“總會(huì)被問(wèn)到的jvm內(nèi)存模型面試題”,你能回答上來(lái)嗎?如果想要了解更多的Java面試題相關(guān)內(nèi)容,可以關(guān)注動(dòng)力節(jié)點(diǎn)Java官網(wǎng)。

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

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 欧洲亚洲精品 | 免费在线观看毛片 | 欧美国产综合 | 久久se精品动漫一区二区三区 | 日本大臿亚洲香蕉大片 | 精品一成人岛国片在线观看 | 免费一级欧美毛片 | 美女被草视频 | 在线观看视频91 | 他也色在线| 国产精品久久久久毛片真精品 | 99久久免费看精品国产一区 | 国产视频www | 亚洲美女亚洲精品久久久久 | 欧美视频一区二区专区 | 色综合久久九月婷婷色综合 | 五月婷婷六月综合 | 精品无人区乱码1区2区3区在线 | 97国产精品国产品国语字幕 | 麻豆精品一区 | 男人的天堂在线精品视频 | 久久国产毛片 | 日韩大片在线 | www.香蕉视频 | 狠狠干艹| 手机在线看片国产日韩生活片 | 9966久久精品免费看国产 | 欧美人成毛片在线播放 | 日日干日日| 草草影院一级毛片a级 | 亚洲精品美女视频 | 免费www xxx| 亚洲图片在线观看 | 欧美精品专区第1页 | 久久97久久 | 欧美xxx午夜免费视频 | 国产日韩欧美一区二区 | 大乳妇女bd视频在线观看 | 色爱区综合激情五月综合激情 | 成人交性视频免费看 | 日本亚洲一区二区 |