成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

在Java8和以后版本中JVM的內(nèi)存結(jié)構(gòu)慢慢發(fā)生了變化。作為面試官如果你還不知道,那么面試過程中是不是有些露怯?作為面試者,如果知曉這些變化,又將成為面試中的亮點。

成都創(chuàng)新互聯(lián)公司的客戶來自各行各業(yè),為了共同目標(biāo),我們在工作上密切配合,從創(chuàng)業(yè)型小企業(yè)到企事業(yè)單位,感謝他們對我們的要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。專業(yè)領(lǐng)域包括成都網(wǎng)站制作、成都做網(wǎng)站、電商網(wǎng)站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā)。

如果在網(wǎng)絡(luò)上搜索JVM內(nèi)存結(jié)構(gòu),90%的可能會搜到Java7及以前的內(nèi)存圖,本篇文章將會對JVM內(nèi)存結(jié)構(gòu)再次細化,深入理解Java8之后的內(nèi)部變化?,F(xiàn)在意×××”的好處了吧。在這里可以不斷的刷新你的知識和認(rèn)知。

JVM內(nèi)存結(jié)構(gòu)的細化

來看一下JVM中的內(nèi)存結(jié)構(gòu)圖。

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

為了更細化的講解,我們將該圖進行進一步的優(yōu)化調(diào)整。針對java7及以前版本的細化。

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

看出變化了嗎?堆和方法區(qū)連在了一起,但這并不能說堆和方法區(qū)是一起的,它們在邏輯上依舊是分開的。但在物理上來說,它們又是連續(xù)的一塊內(nèi)存。也就是說,方法區(qū)和前面講到的Eden和老年代是連續(xù)的。

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

在繼續(xù)進行下去之前,我們先來理解兩個概念:規(guī)范和實現(xiàn)。

規(guī)范和實現(xiàn)

針對Java虛擬機的實現(xiàn)有專門的《Java虛擬機規(guī)范》,在遵守規(guī)范的前提下,不同的廠商會對虛擬機進行不同的實現(xiàn)。 就好比開發(fā)的過程中定義了接口,具體的接口實現(xiàn)大家可以根據(jù)不同的業(yè)務(wù)需求進行實現(xiàn)。

PS:大家都有必要了解一下《Java虛擬機規(guī)范×××”,回復(fù)“002”獲得Java SE 7的虛擬機規(guī)范PDF版。

我們通常使用的Java SE都是由Sun JDK和OpenJDK所提供,這也是應(yīng)用最廣泛的版本。而該版本使用的VM就是HotSpot VM。通常情況下,我們所講的java虛擬機指的就是HotSpot的版本。

永久代(PermGen)

上面理解了規(guī)范和實現(xiàn)之后,來看認(rèn)識一個概念“永久代(Permanet Generation,也稱PermGen)”。對于習(xí)慣了在HotSpot虛擬機上開發(fā)、部署的程序員來說,很多都愿意將方法區(qū)稱作永久代。

本質(zhì)上來講兩者并不等價,僅因為Hotspot將GC分代擴展至方法區(qū),或者說使用永久代來實現(xiàn)方法區(qū)。在其他虛擬機上是沒有永久代的概念的。也就是說方法區(qū)是規(guī)范,永久代是Hotspot針對該規(guī)范進行的實現(xiàn)。

理解上面的概念之后,我們對Java7及以前版本的堆和方法區(qū)的構(gòu)造再進行一下變動。

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

再重復(fù)一遍就是對Java7及以前版本的Hotspot中方法區(qū)位于永久代中。同時,永久代和堆是相互隔離的,但它們使用的物理內(nèi)存是連續(xù)的。

永久代的垃圾收集是和老年代捆綁在一起的,因此無論誰滿了,都會觸發(fā)永久代和老年代的垃圾收集。

但在Java7中永久代中存儲的部分?jǐn)?shù)據(jù)已經(jīng)開始轉(zhuǎn)移到Java Heap或Native Memory中了。比如,符號引用(Symbols)轉(zhuǎn)移到了Native Memory;字符串常量池(interned strings)轉(zhuǎn)移到了Java Heap;類的靜態(tài)變量(class statics)轉(zhuǎn)移到了Java Heap。

然后,在Java8中,時代變了,Hotspot取消了永久代。永久代真的成了永久的記憶。永久代的參數(shù)-XX:PermSize和-XX:MaxPermSize也隨之失效。

元空間(Metaspace)

對于Java8,HotSpots取消了永久代,那么是不是就沒有方法區(qū)了呢?當(dāng)然不是,方法區(qū)只是一個規(guī)范,只不過它的實現(xiàn)變了。

在Java8中,元空間(Metaspace)登上舞臺,方法區(qū)存在于元空間(Metaspace)。同時,元空間不再與堆連續(xù),而且是存在于本地內(nèi)存(Native memory)。

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

本地內(nèi)存(Native memory),也稱為C-Heap,是供JVM自身進程使用的。當(dāng)Java Heap空間不足時會觸發(fā)GC,但Native memory空間不夠卻不會觸發(fā)GC。

面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間

針對Java8的調(diào)整,我們再次對內(nèi)存結(jié)構(gòu)圖進行調(diào)整。

元空間存在于本地內(nèi)存,意味著只要本地內(nèi)存足夠,它不會出現(xiàn)像永久代中“java.lang.OutOfMemoryError: PermGen space”這種錯誤。看上圖中的方法區(qū),是不是“膨脹”了。

默認(rèn)情況下元空間是可以無限使用本地內(nèi)存的,但為了不讓它如此膨脹,JVM同樣提供了參數(shù)來限制它使用的使用。

  • -XX:MetaspaceSize,class metadata的初始空間配額,以bytes為單位,達到該值就會觸發(fā)垃圾收集進行類型卸載,同時GC會對該值進行調(diào)整:如果釋放了大量的空間,就適當(dāng)?shù)慕档驮撝?;如果釋放了很少的空間,那么在不超過MaxMetaspaceSize(如果設(shè)置了的話),適當(dāng)?shù)奶岣咴撝怠?/li>
  • -XX:MaxMetaspaceSize,可以為class metadata分配的最大空間。默認(rèn)是沒有限制的。
  • -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空間容量的百分比,減少為class metadata分配空間導(dǎo)致的垃圾收集。
  • -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空間容量的百分比,減少為class metadata釋放空間導(dǎo)致的垃圾收集。

永久代為什么被替換了

思考一下,為什么使用元空間替換永久代?

表面上看是為了避免OOM異常。因為通常使用PermSize和MaxPermSize設(shè)置永久代的大小就決定了永久代的上限,但是不是總能知道應(yīng)該設(shè)置為多大合適, 如果使用默認(rèn)值很容易遇到OOM錯誤。

當(dāng)使用元空間時,可以加載多少類的元數(shù)據(jù)就不再由MaxPermSize控制, 而由系統(tǒng)的實際可用空間來控制。

更深層的原因還是要合并HotSpot和JRockit的代碼,JRockit從來沒有所謂的永久代,也不需要開發(fā)運維人員設(shè)置永久代的大小,但是運行良好。同時也不用擔(dān)心運行性能問題了,在覆蓋到的測試中, 程序啟動和運行速度降低不超過1%,但是這點性能損失換來了更大的安全保障。

小結(jié)

經(jīng)過上面的講解和演變,是不是對JVM的內(nèi)存結(jié)構(gòu)有了更深的理解了?可以和面試官多聊一會兒了,畢竟面試官的時間也不多了。

新聞名稱:面試官,Java8中JVM內(nèi)存結(jié)構(gòu)變了,永久代到元空間
URL鏈接:http://jinyejixie.com/article26/gpipjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、搜索引擎優(yōu)化企業(yè)建站、企業(yè)網(wǎng)站制作、面包屑導(dǎo)航定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
江油市| 武陟县| 噶尔县| 梓潼县| 阆中市| 兴山县| 大名县| 文山县| 衡阳县| 沙洋县| 宝应县| 漳浦县| 响水县| 什邡市| 贺兰县| 宁陵县| 门源| 宝应县| 康马县| 无极县| 徐州市| 仙桃市| 基隆市| 循化| 吉林省| 黄梅县| 德安县| 云浮市| 公安县| 乐安县| 林西县| 阿克陶县| 融水| 岗巴县| 江西省| 炎陵县| 山西省| 清水县| 商水县| 司法| 梁平县|