元空間是方法區(qū)的一種具體實(shí)現(xiàn)你可以把方法區(qū)理解為Java中定義的一個(gè)接口,把元空間/永久代看做這個(gè)接口的具體實(shí)現(xiàn)類方法區(qū)是規(guī)范,元空間/永久代是Hotspot針對(duì)該規(guī)范進(jìn)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > Java8中的JVM元空間是不是方法區(qū)?

Java8中的JVM元空間是不是方法區(qū)?

時(shí)間:2023-11-12 06:24:01 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-11-12 06:24:01 來源:網(wǎng)站運(yùn)營(yíng)

Java8中的JVM元空間是不是方法區(qū)?:不是的,應(yīng)該說是:

元空間是方法區(qū)的一種具體實(shí)現(xiàn)
你可以把方法區(qū)理解為Java中定義的一個(gè)接口,把元空間/永久代看做這個(gè)接口的具體實(shí)現(xiàn)類
方法區(qū)是規(guī)范,元空間/永久代是Hotspot針對(duì)該規(guī)范進(jìn)行的實(shí)現(xiàn)。
在JVM規(guī)范中,方法區(qū)被定義為一種邏輯區(qū)域,而方法區(qū)具體怎么實(shí)現(xiàn)是各JVM的實(shí)現(xiàn)細(xì)節(jié),所以方法區(qū)的內(nèi)容在堆里也好,不在堆里也好都是符合標(biāo)準(zhǔn)的。

如果想要深入了解JVM的話,可以買這一本《Java虛擬機(jī)規(guī)范》,這一章中講解的比較詳細(xì)




元空間這個(gè)東西,是在JDK8以后才存在的,JDK7及以前,只有永久代這個(gè)區(qū)域

元空間的存儲(chǔ)位置是在計(jì)算機(jī)的內(nèi)存當(dāng)中,而永久代的存儲(chǔ)位置是在JVM的堆(Heap)中

根據(jù)視頻里的講解,講師的個(gè)人推測(cè),JDK8以后,JVM用元空間代替永久代的原因可能是:

  1. 隨著操作系統(tǒng)的發(fā)展,計(jì)算機(jī)支持的內(nèi)存從32位的最大2^32字節(jié),變?yōu)?4位的最大2^48字節(jié)(64位操作系統(tǒng)有16位是保留位,所以只有48位可用)
  2. 隨著Java在Web領(lǐng)域的發(fā)展,Java程序變得越來越大,需要加載的內(nèi)容也越來越多,如果使用永久代實(shí)現(xiàn)方法區(qū),那么需要手動(dòng)擴(kuò)大堆的大小,而使用元空間之后,就可以直接存儲(chǔ)在內(nèi)存當(dāng)中,不用手動(dòng)去修改堆的大小。
2021/05/16更新:

最近看文章的時(shí)候看到了官方JEP對(duì)于移除PermGen的理由:

地址:JEP 122: Remove the Permanent Generation

Motivation
This is part of the JRockit and Hotspot convergence effort. JRockit customers do not need to configure the permanent generation (since JRockit does not have a permanent generation) and are accustomed to not configuring the permanent generation.
======中文翻譯======
動(dòng)機(jī)
這是JRockit和Hotspot融合工作的一部分。JRockit的客戶不需要配置永久代(因?yàn)镴Rockit沒有永久代),并且習(xí)慣于不配置永久代。

元空間的空間范圍默認(rèn)是:
最?。?0.75MB 最大:16EB(GB -> TB -> PB -> EB)

補(bǔ)充:最近在看匯編,突然發(fā)現(xiàn)這個(gè)數(shù)字的大小剛好是64位計(jì)算機(jī)可以識(shí)別到的最大內(nèi)存。

地址總線(Address Bus)是一種計(jì)算機(jī)總線,是CPU或有DMA能力的單元,用來溝通這些單元想要訪問(讀取/寫入)計(jì)算機(jī)內(nèi)存組件/地方的物理地址。 [1]
數(shù)據(jù)總線的寬度,隨可尋址的內(nèi)存組件大小而變,決定有多少的內(nèi)存可以被訪問。
舉例來說:一個(gè) 16位元 寬度的位址總線 (通常在 1970年 和 1980年早期的 8位元處理器中使用) 到達(dá) 2 的 16 次方 = 65536 = 64 KB 的內(nèi)存位址,而一個(gè) 32位單元位址總線 (通常在像現(xiàn)今 2004年 的 PC 處理器中) 可以尋址到 4,294,967,296 = 4 GB 的位址。但現(xiàn)在很多計(jì)算機(jī)內(nèi)存已經(jīng)大于4G(windows XP x32位系統(tǒng)最大只能識(shí)別3.29G,所以要使用4G以上大內(nèi)存就要用windows x64位系統(tǒng))。所以主流的計(jì)算機(jī)都是64位的處理器也就是說可以尋址到2^64=16X10^18=16EB的位址,在很長(zhǎng)一段時(shí)間內(nèi)這個(gè)數(shù)字是用不完的。
來源于百度百科:

但是你可以通過這兩個(gè)命令來設(shè)置大小

-XX:MetaspaceSize=

-XX:MaxMetaspaceSize=


回答參考來自視頻的P3 (時(shí)間:7':23'' - 19':19''):

視頻講的挺好的,老師使用它手寫的一個(gè)JVM來講解,遇到難點(diǎn)直接看他自己寫的C++源碼,會(huì)更形象。



關(guān)鍵詞:方法,空間

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉