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

十分鐘掌握JVM垃圾回收核心知識點

開發 后端
Java堆區可以劃分為新生代和老年代,新生代又可以進一步劃分為Eden區、Survivor 1區、Survivor 2區。

垃圾回收

隨著程序的運行,內存中的實例對象、變量等占據的內存越來越多,如果不及時進行回收,會降低程序運行效率,甚至引發系統異常,JVM會自動完成垃圾回收工作,主要包括:

  • Minor GC/Young GC:針對新生代的垃圾收集。
  • Major GC/Old GC:針對老年代的垃圾收集。
  • Full GC:針對整個Java堆以及方法區的垃圾收集。

Java堆區可以劃分為新生代和老年代,新生代又可以進一步劃分為Eden區、Survivor 1區、Survivor 2區。具體比例參數的話,可以看一下這張圖。

垃圾回收原理

一般情況下,新創建的對象都會被分配到Eden區(一些大對象特殊處理),這些對象經過第一次Minor GC后,如果仍然存活,將會被移到Survivor區。對象在Survivor區中每熬過一次Minor GC,年齡就會增加1歲,當它的年齡增加到一定程度時,就會被移動到年老代中。因為年輕代中的對象基本都是朝生夕死的(80%以上),所以在年輕代的垃圾回收算法使用的是復制算法,復制算法的基本思想就是將內存分為兩塊,每次只用其中一塊,當這一塊內存用完,就將還活著的對象復制到另外一塊上面。復制算法不會產生內存碎片。在GC開始的時候,對象只會存在于Eden區和名為“From”的Survivor區,Survivor區“To”是空的。緊接著進行GC,Eden區中所有存活的對象都會被復制到“To”,而在“From”區中,仍存活的對象會根據他們的年齡值來決定去向。年齡達到一定值(年齡閾值,可以通過-XX:MaxTenuringThreshold來設置)的對象會被移動到年老代中,沒有達到閾值的對象會被復制到“To”區域。經過這次GC后,Eden區和From區已經被清空。這個時候,“From”和“To”會交換他們的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎樣,都會保證名為To的Survivor區域是空的。Minor GC會一直重復這樣的過程,直到“To”區被填滿,“To”區被填滿之后,會將所有對象移動到年老代中。

垃圾回收算法

標記--清除算法就是對無效的對象進行標記,然后清除。

標記--復制算法就是把Java堆分成兩塊,每次垃圾回收時只使用其中一塊,然后把存活的對象全部移動到另一塊區域。

標記--整理算法算是一種折中的垃圾收集算法,在對象標記的過程,和前面兩個執行的是一樣步驟。但是,進行標記之后,存活的對象會移動到堆的一端,然后直接清理存活對象以外的區域就可以了。這樣,既避免了內存碎片,也不存在堆空間浪費的說法了。但是,每次進行垃圾回收的時候,都要暫停所有的用戶線程,特別是對老年代的對象回收,則需要更長的回收時間,這對用戶體驗是非常不好的。

垃圾收集器

在JVM中,GC是由垃圾回收器來執行,所以,在實際應用場景中,我們需要選擇合適的垃圾收集器,下面我們介紹一下垃圾收集器。

Serial收集器

Serial收集器是最基礎、歷史最悠久的收集器,是一個單線程工作的收集器,使用 Serial收集器,無論是進行 Minor gc 還是 Full GC ,清理堆空間時,所有的應用線程都會被暫停。

ParNew收集器

ParNew 收集器實質上是 Serial 收集器的多線程并行版本,除了同時使用多條線程進行垃圾收集之外,其余的行為包括 Serial 收集器可用的所有控制參數、收集算法、Stop The World、對象分配規則、回收策略等都與 Serial 收集器完全一致。

Parallel Scavenge收集器

Parallel Scavenge收集器也是一款新生代收集器,基于標記——復制算法實現,能夠并行收集的多線程收集器和 ParNew 非常相似。Parallel Scavenge 收集器的目標則是達到一個可控制的吞吐量(Throughput)。所謂吞吐量就是處理器用于運行用戶代碼的時間與處理器總消耗時間的比值。如果虛擬機完成某個任務,用戶代碼加上垃圾收集總共耗費了100分鐘,其中垃圾收集花掉1分鐘,那吞吐量就是99%。

Serial Old收集器

Serial Old是Serial收集器的老年代版本,它同樣是一個單線程收集器,使用標記-整理算法。

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,支持多線程并發收集,基于標記-整理算法實現。

CMS收集器

CMS 收集器設計的初衷是為了消除 Parallel 收集器和 Serial 收集器 Full gc 周期中的長時間停頓。CMS收集器在 Minor gc 時會暫停所有的應用線程,并以多線程的方式進行垃圾回收。

G1收集器

G1垃圾回收器是在Java7 update 4之后引入的一個新的垃圾回收器。G1是一個分代的,增量的,并行與并發的標記-復制垃圾回收器。它的設計目標是為了適應現在不斷擴大的內存和不斷增加的處理器數量,進一步降低暫停時間,同時兼顧良好的吞吐量。

一張圖總結各種GC收集器的比較:

責任編輯:姜華 來源: 今日頭條
相關推薦

2022-08-26 09:01:07

CSSFlex 布局

2024-08-30 10:51:51

2024-10-25 15:56:20

2020-12-17 06:48:21

SQLkafkaMySQL

2023-09-26 22:12:13

數據倉庫Doris

2019-04-01 14:59:56

負載均衡服務器網絡

2023-10-07 00:06:09

SQL數據庫

2024-06-19 09:58:29

2021-09-07 09:40:20

Spark大數據引擎

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2023-04-12 11:18:51

甘特圖前端

2016-01-04 11:18:00

KubernetesKubernetes概容器技術

2015-09-06 09:22:24

框架搭建快速高效app

2012-07-10 01:22:32

PythonPython教程

2024-05-13 09:28:43

Flink SQL大數據

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫

2023-10-07 13:13:24

機器學習模型數據

2019-09-16 09:14:51

2009-10-09 14:45:29

VB程序

2023-07-15 18:26:51

LinuxABI
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 看特级黄色片 | 亚洲国产成人av好男人在线观看 | 国产成人艳妇aa视频在线 | 久草网在线视频 | 国产剧情一区二区三区 | 日韩一区二区在线免费观看 | 欧美日本在线观看 | 日韩另类| 日本激情视频在线播放 | 精品久久一区二区三区 | 国产精品免费在线 | 久久亚洲一区二区三区四区 | 精品一区二区三区在线观看 | 美女一区二区在线观看 | 亚洲午夜一区二区 | 亚洲国产aⅴ精品一区二区 免费观看av | 日韩久久综合网 | 天天操 夜夜操 | 日日骚网| 欧美精品综合 | 亚洲视频在线观看免费 | 国产精品国产成人国产三级 | 成人伊人网 | 九九热在线精品视频 | 爱爱爱av | 久久久精品网站 | 亚洲综合资源 | 九九热精品视频 | 伊人网站视频 | 99精品欧美一区二区蜜桃免费 | 免费午夜视频 | 欧美精品福利 | 国产精品久久久久久婷婷天堂 | www.久久.com| 久久久久无码国产精品一区 | 一久久久 | 视频一区二区国产 | 国产成人高清 | 51ⅴ精品国产91久久久久久 | 久久91| 欧美一区二区在线免费观看 |