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

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 JVM堆內存

JVM堆內存

更新時間:2021-08-02 16:58:13 來源:動力節點 瀏覽1309次

Java堆內存管理是影響性能的主要因素之一。

堆內存溢出是Java項目非常常見的故障,在解決該問題之前,必須先了解下Java堆內存是怎么工作的。

先看下JAVA堆內存是如何劃分的,如圖:

jvm堆

  • JVM內存劃分為堆內存和非堆內存,堆內存分為年輕代(Young Generation)、老年代(Old Generation),非堆內存就一個永久代(Permanent Generation)。
  • 年輕代又分為Eden(生成區)和Survivor(生存區)。Survivor區由FromSpace和ToSpace組成。Eden區占大容量,Survivor兩個區占小容量,默認比例是8:1:1。
  • 堆內存用途:存放的是對象,垃圾收集器就是收集這些對象,然后根據GC算法回收。
  • 非堆內存用途:永久代,也稱為方法區,存儲程序運行時長期存活的對象,比如類的元數據、方法、常量、屬性等。

在JDK1.8版本廢棄了永久代,替代的是元空間(MetaSpace),元空間與永久代上類似,都是方法區的實現,他們最大區別是:元空間并不在JVM中,而是使用本地內存。

元空間有兩個參數:

  • MetaspaceSize:初始化元空間大小,控制發生GC閾值。
  • MaxMetaspaceSize:限制元空間大小上限,防止異常占用過多物理內存。

為什么移除永久代?

移除永久代原因:為融合HotSpot JVM與JRockit VM(新JVM技術)而做出的改變,因為JRockit沒有永久代。

有了元空間就不再會出現永久代OOM問題了

分代概念

新生成的對象首先放到年輕代Eden區,當Eden空間滿了,觸發Minor GC,存活下來的對象移動到Survivor0區,Survivor0區滿后觸發執行Minor GC,Survivor0區存活對象移動到Survivor1區,這樣保證了一段時間內總有一個survivor區為空。經過多次Minor GC仍然存活的對象移動到老年代。

老年代存儲長期存活的對象,占滿時會觸發Major GC=Full GC,GC期間會停止所有線程等待GC完成,所以對相應要求高的應用盡量減少發生Major GC,避免響應超時。

  • Minor GC:清理年輕代
  • Major GC:清理老年代
  • Full GC:清理整個堆空間,包括年輕代和永久代

所有GC都會停止所有應用進程

為什么分代?

將對象根據存活概率進行分類,對存活時間長的對象,放到固定區,從而減少掃描垃圾時間及GC頻率。針對分類進行不同的垃圾回收算法,對算法揚長避短。

為什么Survivor分為兩塊相等大小的幸存空間?

主要為了解決碎片化。如果內存碎片化嚴重,也就是兩個對象占用不連續的內存,已有的連續內存不夠新對象存放,就會觸發GC。

JVM堆內存常用參數

參數 描述
-Xms 堆內存初始大小,單位m、g
-Xmx(MaxHeapSize) 堆內存最大允許大小,一般不要大于物理內存的80%
-XX:PermSize 非堆內存初始大小,一般應用設置初始化200m,最大1024m就夠了
-XX:MaxPermSize 非堆內存最大允許大小
-XX:NewSize(-Xns) 年輕代內存初始大小
-XX:MaxNewSize(-Xmn) 年輕代內存最大允許大小,也可以縮寫
-XX:SurvivorRatio=8 年輕代中Eden區與Survivor區的容量比例值,默認為8,即8:1
-Xss 堆棧內存大小

垃圾回收算法(GC,Garbage Collection)

紅色是標記的非活動對象,綠色是活動對象。

  • 標記-清除(Mark-Sweep)

GC分為兩個階段,標記和清除。首先標記所有可回收的對象,在標記完成后統一回收所有被標記的對象。同時會產生不連續的內存碎片。碎片過多會導致以后程序運行時需要分配較大對象時,無法找到足夠的連續內存,而不得已再次觸發GC。

jvm堆

  • 復制(Copy)

將內存按容量劃分為兩塊,每次只使用其中一塊。當這一塊內存用完了,就將存活的對象復制到另一塊上,然后再把已使用的內存空間一次清理掉。這樣使得每次都是對半個內存區回收,也不用考慮內存碎片問題,簡單高效。缺點需要兩倍的內存空間。

jvm堆

  • 標記-整理(Mark-Compact)

也分為兩個階段,首先標記可回收的對象,再將存活的對象都向一端移動,然后清理掉邊界以外的內存。此方法避免標記-清除算法的碎片問題,同時也避免了復制算法的空間問題。

一般年輕代中執行GC后,會有少量的對象存活,就會選用復制算法,只要付出少量的存活對象復制成本就可以完成收集。

而老年代中因為對象存活率高,沒有額外過多內存空間分配,就需要使用標記-清理或者標記-整理算法來進行回收。

jvm堆

jvm堆

以上就是動力節點小編介紹的"JVM堆內存",希望對大家有幫助,想了解更多可查看Java虛擬機視頻。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久精品看片 | 伊色综合久久之综合久久 | 日本免费人做人一区在线观看 | 欧美在线视频一区二区三区 | 四虎最新紧急入口 | 九九啪啪 | 日韩视频一区二区三区 | 欧美啊v在线观看 | 站长推荐国产午夜免费视频 | 中文字幕视频一区 | 国产一区欧美 | 欧美papa| 一区一区三区产品乱码 | 色色在线视频 | 国产精品亚洲第一区二区三区 | 四虎最新永久免费网址 | 午夜影院一区二区三区 | 欧美成人午夜做爰视频在线观看 | 五月婷婷激情六月 | 伊人久久网国产伊人 | 九色九色九色在线综合888 | 欧美国产在线观看 | 婷婷激情网站 | 草久在线观看视频 | 成人高清视频在线观看大全 | 精品国产不卡一区二区三区 | 99视频免费在线 | 在线日本中文字幕 | 国内夫妇精品对白在线播放 | 国内精品日本久久久久影院 | 91视频地址 | 久久久久久综合一区中文字幕 | 黑人巨大vs日本妞 | 国产成人精品实拍在线 | 国产精品午夜在线观看 | 成人欧美一区在线视频在线观看 | 日本不卡在线观看免费v | 国产99在线播放 | 免费aⅴ视频 | 男人影院在线 | snh48欧洲大片在线观看 |