成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

揭秘HotSpot JVM:探索內(nèi)存區(qū)域劃分細(xì)節(jié)

開發(fā) 前端
直接內(nèi)存也是受本機(jī)物理內(nèi)存限制,在 JDK4 中引入了基于通道與緩沖區(qū)的 NIO,它可以利用 Native 函數(shù)庫直接分配堆外內(nèi)存,然后通過堆內(nèi)的 DirectByteBuffer 對象引用這塊堆外內(nèi)存。

棧與堆

HotSpot 在虛擬機(jī)棧和本地方法棧的實(shí)現(xiàn)上,直接將二者合二為一,也就是說使用同一個棧來支持 Java 方法和本地方法的執(zhí)行,下文以 Java 棧代稱。

并且在 HotSpot 的實(shí)現(xiàn)中 Java 棧是不支持動態(tài)擴(kuò)展的,也就是說 Java 棧通常只會拋出 SOF(StackOverflowError)異常,除非在啟動線程申請內(nèi)存時就因無法獲取足夠的內(nèi)存而出現(xiàn) OOM(OutOfMemoryError)異常。

上一篇說過“幾乎”所有的對象實(shí)例都在堆里分配內(nèi)存,那么為什么說是“幾乎”呢?

刨除邏輯上歸屬于方法區(qū)的靜態(tài)變量不談,HotSopt 虛擬機(jī)中存在 JIT 即時編譯,在即時編譯的過程中,會進(jìn)行逃逸分析,當(dāng)發(fā)現(xiàn)一個局部對象并沒有逃逸到方法和線程之外,那么這個對象就可能不在堆上分配內(nèi)存,而是在棧上分配內(nèi)存。

方法區(qū)的不同版本實(shí)現(xiàn)

方法區(qū)是 JVM 規(guī)范中定義的一個概念,不同的廠商在實(shí)現(xiàn)虛擬機(jī)的時候有不同的落地實(shí)現(xiàn)。

即使在 HotSpot 虛擬機(jī)中,不同的版本也有不同的實(shí)現(xiàn)方式,在 JDK6 的時候方法區(qū)的落地實(shí)現(xiàn)是永久代(PermGen)。

圖片圖片

在 JDK7 的時候方法區(qū)的落地實(shí)現(xiàn)仍是永久代,但是發(fā)生了一些變化,JDK7 將存儲在永久代的字符串常量池、靜態(tài)變量遷出,存儲到了堆區(qū)。

圖片圖片

在 JDK8 的時候 HotSpot 虛擬機(jī)完全舍棄了永久代的落地實(shí)現(xiàn),改用元空間落地實(shí)現(xiàn)。并且 JDK8 將元空間從虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)遷到了本地內(nèi)存中。

圖片圖片

個人理解,JDK8 之前方法區(qū)采用永久代實(shí)現(xiàn),因?yàn)橛谰么?-XX:MaxPermSize 上限,并且這個參數(shù)即使不設(shè)置也會有默認(rèn)值,所以容易發(fā)生 OOM 異常。

于是 JDK7 就將永久代中的字符串常量池、靜態(tài)變量遷出,但 OOM 問題處理可能仍未達(dá)到預(yù)期,最終在 JDK8 采用在本地內(nèi)存中實(shí)現(xiàn)的元空間作為方法區(qū)的落地實(shí)現(xiàn)。

在這個過程中,-XX:PermSize 和 --XX:MaxPermSize JVM 參數(shù)也隨之失效,改為通過--XX: MetaspaceSize 和 -XX:MaxMetaspaceSize 來設(shè)置元空間參數(shù)。

本地內(nèi)存和直接內(nèi)存

最后,我們來介紹一下本地內(nèi)存和直接內(nèi)存。個人理解,截止 JDK8,Java 程序內(nèi)存應(yīng)該是包含 JVM 內(nèi)存和本地內(nèi)存,本地內(nèi)存狹義上又包含元空間和直接內(nèi)存(二者存儲在同一塊區(qū)域,只是作用上不一致)。

本地內(nèi)存

本地內(nèi)存并不是虛擬機(jī)運(yùn)行時數(shù)據(jù)區(qū)的一部分,也不是《Java 虛擬機(jī)規(guī)范》中定義的內(nèi)存區(qū)域。

這塊區(qū)域直接受本機(jī)物理內(nèi)存限制,當(dāng)申請的內(nèi)存超過了本機(jī)物理內(nèi)存,才會拋出 OOM 異常。

直接內(nèi)存

直接內(nèi)存也是受本機(jī)物理內(nèi)存限制,在 JDK4 中引入了基于通道與緩沖區(qū)的 NIO,它可以利用 Native 函數(shù)庫直接分配堆外內(nèi)存,然后通過堆內(nèi)的 DirectByteBuffer 對象引用這塊堆外內(nèi)存。

避免了傳輸?shù)臄?shù)據(jù)在堆和堆外來回復(fù)制,顯著的提高了 IO 性能。這塊堆外內(nèi)存就是直接內(nèi)存。

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2021-11-26 00:00:48

JVM內(nèi)存區(qū)域

2024-11-13 11:12:08

JVM內(nèi)存區(qū)域

2012-03-05 14:19:26

Java

2010-09-25 12:54:24

JVM內(nèi)存

2010-02-03 14:10:28

C++內(nèi)存邏輯區(qū)域

2025-03-03 09:05:56

2015-12-28 11:41:57

JVM內(nèi)存區(qū)域內(nèi)存溢出

2011-06-21 11:16:24

cc++

2011-04-13 16:50:54

CC++內(nèi)存

2010-09-25 15:19:01

2020-08-10 17:49:25

JVM內(nèi)存溢出

2019-07-16 14:59:00

JVM內(nèi)存區(qū)域

2022-07-05 08:34:22

虛擬機(jī)JavaJVM

2020-02-27 13:01:57

JVM內(nèi)存劃分

2013-03-29 11:09:17

JVM內(nèi)存

2018-08-10 22:15:53

2019-11-20 15:02:45

Java虛擬機(jī)內(nèi)存

2009-04-28 13:48:09

2010-01-25 15:40:38

Java 6 u18Hotspot垃圾回收

2020-07-29 14:15:04

JavaJvm算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 永久av| 九九久久这里只有精品 | 久久r精品 | 日日操视频 | 国产视频一区在线 | 久久国产精品无码网站 | 狠狠操婷婷 | 羞羞视频免费观看入口 | 久久激情视频 | 日本久久一区二区三区 | 欧美黑人体内she精在线观看 | 国产蜜臀 | 欧美性生活网 | 国产一区二区影院 | 国产乱码精品一区二区三区中文 | 热re99久久精品国产99热 | 欧美在线视频免费 | 精品国产一区二区三区性色 | 中文字幕一区二区三区四区五区 | 亚洲国产精品久久 | 一区观看 | 国产精品一区二区日韩 | 夜夜爆操| 第一区在线观看免费国语入口 | 欧洲妇女成人淫片aaa视频 | 国产区视频在线观看 | 欧美一区二区三区国产 | 在线不卡一区 | 国产二区视频 | 国产高清一区二区三区 | 91精品国产乱码久久久久久久久 | 农村妇女毛片精品久久久 | 亚洲国产精品久久人人爱 | 久久久久国产 | 午夜小电影| av天天澡天天爽天天av | av大片在线观看 | 久久精品黄色 | 一区二区三区av | 久久久久国产精品一区二区 | 久久夜视频 |