千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 常見的gc策略了解嗎?有哪些gc策略?

常見的gc策略了解嗎?有哪些gc策略?

來源:千鋒教育
發(fā)布人:qyf
時間: 2023-02-28 17:02:00 1677574920

常見的gc策略了解嗎

  GC是分代收集算法,頻繁收集Young區(qū),較少收集Old區(qū),基本不動Perm區(qū) ,JVM在進行GC時,并非每次都對上面三個內(nèi)存區(qū)域一起回收的,大部分時候回收的都是指新生代。

  因此GC按照回 收的區(qū)域又分了兩種類型,一種是普通GC(minor GC),一種是全局GC(major GC or Full GC), 普通 GC(minor GC):只針對新生代區(qū)域的GC。 全局GC(major GC or Full GC):針對年老代的GC,偶爾伴隨對 新生代的GC以及對永久代的GC。

  GC常用算法 1.引用計數(shù)法(了解) 2.復制算法(Copying) 3.標記清除(Mark-Sweep) 4.標記壓縮(Mark-Compact) 5.標記清除壓縮(Mark-Sweep-Compact)

  算法沒有最好的,只能找最合適的,我們使用的是分代收集算法(相對聯(lián)合的應用)

  年輕代(Young Gen)

  年輕代特點是區(qū)域相對老年代較小,對像存活率低。

  這種情況復制算法的回收整理,速度是最快的。復制算法的效率只和當前存活對像大小有關,因而很適用于年輕代 的回收。而復制算法內(nèi)存利用率不高的問題,通過hotspot中的兩個survivor的設計得到緩解。

  老年代(Tenure Gen)

  老年代的特點是區(qū)域較大,對像存活率高。這種情況,存在大量存活率高的對像,復制算法明顯變得不合適。一般是由標記清除或者是標記清除與標記整理的混合實現(xiàn)。

  Mark階段的開銷與存活對像的數(shù)量成正比,這點上說來,對于老年代,標記清除或者標記整理有一些不符,但可以通過多核/線程利用,對并發(fā)、并行的形式提標記效率。

  Sweep階段的開銷與所管理區(qū)域的大小形正相關,但Sweep“就地處決”的特點,回收的過程沒有對像的移動。使其相對其它有對像移動步驟的回收算法,仍然是效率最好的。但是需要解決內(nèi)存碎片問題。

  Compact階段的開銷與存活對像的數(shù)據(jù)成開比,如上一條所描述,對于大量對像的移動是很大開銷的,做為老年代 的第一選擇并不合適。

  基于上面的考慮,老年代一般是由標記清除或者是標記清除與標記整理的混合實現(xiàn)。以hotspot中的CMS回收器為 例,CMS是基于Mark-Sweep實現(xiàn)的,對于對像的回收效率很高,而對于碎片問題,CMS采用基于Mark-Compact 算法的Serial Old回收器做為補償措施:當內(nèi)存回收不佳(碎片導致的Concurrent ModeFailure時),將采用 Serial Old執(zhí)行Full GC以達到對老年代內(nèi)存的整理。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉載。
10年以上業(yè)內(nèi)強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
python字符串截???

在Python中,字符串是一種非常常見的數(shù)據(jù)類型,它可以用來表示文本、數(shù)字、符號等內(nèi)容。在實際應用中,我們經(jīng)常需要對字符串進行截取,以便獲取...詳情>>

2023-11-02 17:56:27
Python socket C/S結構的聊天室應用實現(xiàn)?

隨著互聯(lián)網(wǎng)的發(fā)展,聊天室應用成為人們?nèi)粘I钪惺殖R姷囊环N社交方式。Python語言的Socket模塊是實現(xiàn)網(wǎng)絡通信的重要工具,可以輕松地實現(xiàn)C/...詳情>>

2023-11-02 17:53:38
用while求1到100的奇數(shù)和?

在計算機編程中,循環(huán)語句是非常重要的一部分。而while語句是其中最基本也是最常用的一種。它的作用是在滿足一定條件的情況下,重復執(zhí)行一段代...詳情>>

2023-11-02 17:50:57
python創(chuàng)建一個集合?

在Python中,集合是一種無序且不重復的數(shù)據(jù)類型,可以用于存儲一組元素。創(chuàng)建一個集合非常簡單,只需要使用大括號{}或者set()函數(shù)即可。使用大...詳情>>

2023-11-02 17:34:02
linux改文件屬主命令?

Linux文件相關命令1、命令一:cat cat命令應該是在Linux中查看文件內(nèi)容最常見的命令了。使用cat命令會打印指定文件的所有內(nèi)容到標準輸出上,比...詳情>>

2023-10-31 19:58:15