jvm堆內(nèi)存和非堆內(nèi)存(小白入門文,各博客視頻基礎(chǔ)總結(jié))

圖片.png

一:堆內(nèi)存和非堆內(nèi)存定義
Java虛擬機(jī)具有一個(gè)堆(Heap)嘱根,堆是運(yùn)行時(shí)數(shù)據(jù)區(qū)域顶燕,所有類實(shí)例和數(shù)組的內(nèi)存均從此處分配。堆是Java虛擬機(jī)啟動(dòng)時(shí)創(chuàng)建的。在JVM中堆之外的內(nèi)u你成為非堆內(nèi)存(Non-heap memory)。
堆內(nèi)存以及相應(yīng)垃圾回收算法
1.堆的大小可以固定用僧,也可以擴(kuò)大和縮小责循,堆內(nèi)存不需要是連續(xù)空間糟港。
2.對(duì)象創(chuàng)建后進(jìn)入Eden。年輕代分為Eden和Survivor院仿。Survivor由FromSpace和ToSpace組成秸抚。Eden區(qū)占大容量,Survivor占小容量歹垫,默認(rèn)比例8:1:1剥汤。
MinorGC:采用復(fù)制算法。首先把Eden和ServivorFrom區(qū)域中存活的對(duì)象賦值到ServivorTo區(qū)域(如果對(duì)象年齡達(dá)到老年標(biāo)準(zhǔn)/ServivorTo位置不夠了排惨,則復(fù)制到老年代)吭敢,同時(shí)對(duì)象年齡+1,然后清空Eden和ServivorFrom中的對(duì)象暮芭。然后ServivorTo和ServivorFrom互換鹿驼。
3.老年代
老年代存放生命周期長的內(nèi)存對(duì)象。
老年代對(duì)象相對(duì)穩(wěn)定辕宏,所以不會(huì)頻繁GC畜晰。在進(jìn)行MajorGC前一般都先進(jìn)行一次MinorGC,使新生代的對(duì)象進(jìn)入老年代瑞筐,導(dǎo)致空間不夠用時(shí)才觸發(fā)舷蟀。當(dāng)無法找到足夠大的連續(xù)空間分配給新晉的對(duì)象也會(huì)提前觸發(fā)MajorGC進(jìn)行垃圾回收。
MajorGC:如果使用CMS收集器,采用標(biāo)記-清除算法野宜。首先掃描老年代,標(biāo)記所有可回收對(duì)象魔策,標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記對(duì)象匈子。同時(shí)會(huì)產(chǎn)生不連續(xù)的內(nèi)存碎片。碎片過多會(huì)導(dǎo)致以后程序運(yùn)行需要分配較大對(duì)象時(shí)闯袒,無法找到足夠的連續(xù)內(nèi)存虎敦,而不得已再次出發(fā)GC。否則采用標(biāo)記-壓縮算法政敢。
標(biāo)記-壓縮:在標(biāo)記可回收對(duì)象后其徙,將不可回收對(duì)象移向一端,然后清除標(biāo)記對(duì)象喷户。
當(dāng)老年代也滿了裝不下時(shí)唾那,拋出OOM異常。
二:永久代
內(nèi)存中永久保存的區(qū)域褪尝,主要存放Class和Meta(元數(shù)據(jù))的信息闹获,Class在被加載的時(shí)候被放入永久區(qū)域。他和存放實(shí)例的區(qū)域不同河哑,GC不會(huì)再主程序運(yùn)行期對(duì)永久區(qū)進(jìn)行清理避诽。所以也可可能導(dǎo)致永久代區(qū)域隨著加載Class的增多而脹滿,拋出OOM璃谨。
Java8中沙庐,永久代已經(jīng)被移除,被一個(gè)成為“元數(shù)據(jù)區(qū)”(元空間)的區(qū)域所取代佳吞。
元空間的本質(zhì)與永久代類似拱雏,都是JVM方法區(qū)的實(shí)現(xiàn)。不過元空間使用本地內(nèi)存容达,永久代在JVM虛擬機(jī)中古涧。因此,默認(rèn)情況下花盐,元空間的大小受本地內(nèi)存限制羡滑。類的元數(shù)據(jù)放入native memory,字符串常量池和類的靜態(tài)變量放入java堆中算芯,這樣可以加載多少類的元數(shù)據(jù)就不再由MaxPermSize控制,而是由系統(tǒng)實(shí)際可用空間控制柒昏。
1元空間解決了永久代的OOM問題,元數(shù)據(jù)和class對(duì)象在永久代容易出現(xiàn)性能問題和內(nèi)存溢出熙揍。
2類的方法信息等比較難確定其大小职祷,對(duì)于永久代的大小指定比較困難,小永久代溢出,大老年代溢出有梆。
3永久代會(huì)為GC帶來不必要的復(fù)雜度是尖,回收效率低。
三:堆內(nèi)存參數(shù)調(diào)優(yōu)
1.-Xms 設(shè)置初始分配內(nèi)存大小,默認(rèn)物理內(nèi)存1/64
2.-Xmx 設(shè)置最大分配內(nèi)存泥耀,默認(rèn)物理內(nèi)存1/4
long maxMemory = Runtime.getRuntime().maxMemory(); long totalMemory = Runtime.getRuntime().totalMemory(); System.out.println("最大分配內(nèi)存"+maxMemory/(double)1024/1024+"MB "+maxMemory/(double)1024/1024/1024+"GB"); System.out.println("默認(rèn)分配內(nèi)存"+totalMemory/(double)1024/1024+"MB "+totalMemory/(double)1024/1024/1024+"GB");

圖片.png

四:比例
新生代 ( Young ) 與老年代 ( Old ) 的比例的值為 1:2 ( 該值可以通過參數(shù) –XX:NewRatio 來指定 )饺汹,即:新生代 ( Young ) = 1/3 的堆空間大小。老年代 ( Old ) = 2/3 的堆空間大小痰催。其中兜辞,新生代 ( Young ) 被細(xì)分為 Eden 和 兩個(gè) Survivor 區(qū)域,這兩個(gè) Survivor 區(qū)域分別被命名為 from 和 to夸溶,以示區(qū)分逸吵。Eden : from : to = 8 : 1 : 1 ( 可以通過參數(shù) –XX:SurvivorRatio 來設(shè)定 )。
五:JVM垃圾回收器
一篇很好的博客:https://blog.csdn.net/qq_26525215/article/details/84294481#Serial_11

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缝裁,一起剝皮案震驚了整個(gè)濱河市扫皱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌压语,老刑警劉巖啸罢,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胎食,居然都是意外死亡扰才,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門厕怜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衩匣,“玉大人,你說我怎么就攤上這事粥航±拍螅” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵递雀,是天一觀的道長柄延。 經(jīng)常有香客問我,道長缀程,這世上最難降的妖魔是什么搜吧? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮杨凑,結(jié)果婚禮上滤奈,老公的妹妹穿的比我還像新娘。我一直安慰自己撩满,他們只是感情好蜒程,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布绅你。 她就那樣靜靜地躺著,像睡著了一般昭躺。 火紅的嫁衣襯著肌膚如雪忌锯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天领炫,我揣著相機(jī)與錄音汉规,去河邊找鬼。 笑死驹吮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的晶伦。 我是一名探鬼主播碟狞,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼婚陪!你這毒婦竟也來了族沃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤泌参,失蹤者是張志新(化名)和其女友劉穎脆淹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沽一,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盖溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铣缠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烘嘱。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蝗蛙,靈堂內(nèi)的尸體忽然破棺而出蝇庭,到底是詐尸還是另有隱情,我是刑警寧澤捡硅,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布哮内,位于F島的核電站,受9級(jí)特大地震影響壮韭,放射性物質(zhì)發(fā)生泄漏北发。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一泰涂、第九天 我趴在偏房一處隱蔽的房頂上張望鲫竞。 院中可真熱鬧,春花似錦逼蒙、人聲如沸从绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僵井。三九已至陕截,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間批什,已是汗流浹背农曲。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驻债,地道東北人乳规。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像合呐,于是被迫代替她去往敵國和親暮的。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 第一章 簡介 J2SE平臺(tái)的一大優(yōu)勢是它的自動(dòng)化內(nèi)存管理淌实,避免了開發(fā)者去面對(duì)內(nèi)存管理的復(fù)雜性冻辩。 本文以Sun J2...
    tianyiliusha閱讀 953評(píng)論 0 1
  • Java 虛擬機(jī)有自己完善的硬件架構(gòu), 如處理器、堆棧拆祈、寄存器等恨闪,還具有相應(yīng)的指令系統(tǒng)。JVM 屏蔽了與具體操作系...
    尹小凱閱讀 1,685評(píng)論 0 10
  • 前言 Java是一種跨平臺(tái)的語言放坏,當(dāng)初其設(shè)計(jì)初衷也是為了解決各個(gè)平臺(tái)編譯環(huán)境具有差異咙咽,對(duì)程序移植性問題造成困難這一...
    ObjectSpace閱讀 305評(píng)論 0 1
  • 內(nèi)存溢出和內(nèi)存泄漏的區(qū)別 內(nèi)存溢出:out of memory,是指程序在申請(qǐng)內(nèi)存時(shí)轻姿,沒有足夠的內(nèi)存空間供其使用犁珠,...
    Aimerwhy閱讀 732評(píng)論 0 1
  • 安靜
    turbofei閱讀 77評(píng)論 0 0