1. 程式人生 > >4-JVM的GC演算法(2)

4-JVM的GC演算法(2)

新生代可用的GC策略

首先介紹一種Stop-The-World(STW):Java中一種全域性暫停的現象,全域性停頓,所有Java程式碼停止,native程式碼可以執行,但是不能和JVM互動。這個過程多半由於GC引起,包括:(1)Dump執行緒;(2)死鎖檢查;(3)堆Dump。

序列GC(Serial Copying)

複製(Copying)清理演算法

A、 掃描年輕代中所有存活的物件;

B、 使用Minor GC進行垃圾回收,同時將存活物件儲存到“S0”或者“S1”區;

C、 在上一次Minor GC的基礎上進行“S0”和“S1”的角色互換

D、 經歷過多次Minor GC依然存活的物件晉升到老年代

並行回收GC(Parallel Scavenge)

  複製(Copying)清理演算法

操作步驟:在序列演算法的掃描和複製時均採用多執行緒處理方式,並行回收GC為空間較大的年輕代提供了許多優化。

優勢:在多CPU的機器上其耗時會比序列GC短,適合多CPU且對暫停時間要求較短的應用。

劣勢:在年輕代使用並行GC處理的時候回產生一個STW的暫停,在進行物件回收的時候其他的執行緒會被暫時性掛起,來保證垃圾回收的徹底

圖一:序列回收和並行回收

並行GC(ParNew)

複製(Copying)清理演算法

並行GC(ParNew)必須結合老年代“CMSGC”一起使用,因為在年輕代如果發生了“Minor GC”時,老年代也需要使用“CMS GC”同時處理。

CMS(Concurrent Mark-Sweep)是以犧牲吞吐量為代價來獲得最短回收的垃圾回收器,對於要求伺服器響應速度的應用上,這種垃圾回收器非常合適。

老年代可用GC策略

序列GC(Serial MSC)

標記-清除-壓縮

A、 掃描老年代中還存活的物件,並且對這些物件進行標記;

B、 遍歷整個老年代的記憶體空間,回收所有未標記的物件記憶體;

C、 將所有存活物件集中在一端,而後將所有回收物件的記憶體空間變為一塊連續的記憶體空間

優缺點:序列執行的過程為單執行緒,需要暫停應用並耗時較長。

並行GC(Parallel MSC)

演算法標記-壓縮

A、 將老年代的記憶體空間按照執行緒個數劃分為若干子區域;

B、 多個執行緒並行對各自子區域內的存活物件進行標記;

C、 多個執行緒並行清理所有未標記的物件;

D、 多個執行緒並行將多個存活物件整理在一起,並將所有被回收的物件空間整合為一體;

優缺點:多個執行緒同時進行垃圾回收可以縮短應用的暫停時間,但是由於老年代的空間一般較大,所有掃描和標記存活物件上需要花費的時間依然較長。

併發GC(CMS)

演算法標記-清除

A、 初始標記(STWInitial Mark):虛擬機器暫停正在執行的任務(STW),有根物件掃描出所有關聯物件並做出標記。此過程只會導致短暫的JVM暫停。

B、 併發標記(ConcurrentMarking):恢復所有暫停的執行緒物件並且對之前標記過的物件進行掃描,取得所有和標記物件相關聯的物件。

C、 併發預處理(ConcurrentPrecleaning):查詢所有併發標記階段新進入老年代的物件(一些物件可能從新生代晉升到老年代,或者一些物件被分配到了老年代),通過重新掃描減少下一階段的工作;

D、 重新標記(STWRemark):此階段會暫停虛擬機器,對在“併發標記”階段被改變的引用或者新建立的物件進行標記。

E、 併發清理(ConcurrentSweeping):恢復所有暫停的應用執行緒,對所有未標記的垃圾物件進行清理,並且儘量將已回收物件的空間重新拼湊成一個整體,在此階段收集器執行緒和應用執行緒併發執行。

F、  併發重置(ConcurrentReset):重置CMS收集器的資料結構,等待下一次的垃圾回收。

優缺點:只有在第一次和重新標記階段才會停止整個應用,這樣對應用程式的影響非常小。缺點是併發標記和回收執行緒會與應用執行緒搶佔CPU資源,並且沒有進行壓縮,容易產生記憶體碎片。


圖二:序列GC和CMS

GC選擇策略

圖三:GC的選擇策略

以上策略的缺點:都需要掃描全部子記憶體。

相關推薦

4-JVM的GC演算法2

新生代可用的GC策略首先介紹一種Stop-The-World(STW):Java中一種全域性暫停的現象,全域性停頓,所有Java程式碼停止,native程式碼可以執行,但是不能和JVM互動。這個過程多半由於GC引起,包括:(1)Dump執行緒;(2)死鎖檢查;(3)堆Dump

centos7.4搭建Memcached2

memcached magent keepalived 單臺memcached服務的安裝和測試很簡單,考慮到老生常談的單點故障問題,可以使用magent和keepalived加以解決magent:把一臺memcached服務端的數據實時備份到另一臺,互備keepalived:一臺服務器down,通

資料結構與演算法2—— 棧java

1 棧的實現 1.1 簡單陣列實現棧 package mystack; public class ArrayStack { private int top; //當前棧頂元素的下標 private int[] array; public ArraySt

【機器學習】Windows +Anaconda3(python3.5)+opencv3.4.1 安裝2

                 Windows +Anaconda3(python3.5)+opencv3.4.1 安裝(2)   原文參考:https://www.cnblogs.com/

cocoscreator之KUOKUO分享碰撞演算法2

很多簡單的2D小遊戲只需要監聽碰撞即可,那就不用新增物理元件什麼的,直接函式搞定。 cc.Class({ extends: cc.Component, properties: { one:cc.Node, two:cc.Node, },

第11章 拾遺4:IPv62_給計算機配置IPv6地址

4. 給計算機配置IPv6地址 4.1 無狀態自動配置IPv6地址 (1)網路拓撲   ①無狀態地址自動配置是指不需要DHCP伺服器進行管理,由客戶端向路由器傳送字首請求(RS)詢問其所在網段。路由器收到RS後,會發送字首公告訊息(RA),客戶端根據網路RA並自己的MAC地址計算出

貪心演算法2

King’s Cake HDU 5640 http://acm.hdu.edu.cn/showproblem.php?pid=5640 It is the king’s birthday before the military parade . The ministers

資料結構與演算法2- vector概念介紹

宣告:雖然本系列部落格與具體的程式語言無關。但是本文作者對c++相對比較熟悉,其次是java,所以難免會有視角上的偏差。舉例也大多是和這兩門語言相關。 Vector的出現主要是為了解決陣列的靜態空間的問題。所謂靜態空間指的是一旦配置就不能改變。當然如果你硬要重新配置也是可以的,自己重新申請一塊空

”藍橋杯“演算法大賽·入門演算法2

問題描述 給定圓的半徑r,求圓的面積。 參考程式碼 C++ #include <iostream> #include <cmath> #include <iomanip> using namespace std; int

linux核心排程演算法2--CPU時間片如何分配

核心在微觀上,把CPU的執行時間分成許多分,然後安排給各個程序輪流執行,造成巨集觀上所有的程序彷彿同時在執行。雙核CPU,實際上最多隻能有兩個程序在同時執行,大家在top、vmstat命令裡看到的正在執行的程序,並不是真的在佔有著CPU哈。 所以,一些設計良好的高效能程序,比如nginx,都是實際上有幾顆C

資料結構與演算法2排序演算法,用Python實現插入,選擇,堆排,冒泡,快排和歸併排序

前段時間鼓起勇氣和老闆說了一下以後想從事機器學習方向的工作,所以最好能有一份不錯的實習,希望如果我有好的機會他可以讓我去,沒想到老闆非常通情達理,說人還是要追尋自己感興趣的東西,忙完這陣你就去吧。所以最

【Dubbo原始碼學習】負載均衡演算法2-輪詢演算法的實現

@Overrideprotected <T> Invoker<T> doSelect(List<Invoker<T>> invokers, URL url, Invocation invocation) { String key = invokers.ge

機器學習十四——協同過濾的ALS演算法2、主成分分析

Kendall秩相關係數(Kendall rank correlation coefficient) 對於秩變數對(xi,yi),(xj,yj): (xi−xj)(yi−yj)⎧⎩⎨>0,=0,<0,concordantneither con

菜鳥學matlab之智慧演算法2——————————BP神經網路演算法

一.演算法背景和理論 BP(Back Propagation)神經網路是1986年由Rumelhart和McCelland為首的科學家小組提出,是一種按誤差逆傳播演算法訓練的多層前饋網路,是目前應用最廣泛的神經網路模型之一。BP網路能學習和存貯大量的輸入-輸出

密碼演算法2之凱撒密碼

摘要 本文主要講述凱撒密碼。 1. 這是什麼鬼? 凱撒密碼是一種早期的簡單的對稱密碼,金鑰可以用來加密和解密。其又被稱為移位密碼——很形象! 2. 凱撒密碼的原理 明文:={ 英文字元號串 } 金鑰:=key取{ 0,1,2,...,25 }中任一個數字 加密c(i):

uboot-2012-4.1移植 2修改uboot程式碼

3  修改程式碼   a 修改start.s中時鐘設定部分。                /*修改這裡,時鐘設定不正確*/      /* FCLK:HCLK:PCLK = 1:4:8 */      /*設定時鐘*/      ldr r0,=0x4c000014      mov r1,#0x05 

資料結構與演算法2——各種方法實現楊輝三角

分別用二維陣列、一維陣列、遞迴等三種方法實現楊輝三角; 楊輝三角:首尾都為1,中間數值等於其肩上兩個數值之和,形如下面: 1

資料結構與演算法2-簡單排序

一,氣泡排序 package ch02; /** * 氣泡排序 * @author Administrator * */ public class BubbleSort { public static void sort(long[] arr){ long t

《機器學習實戰》第二章:k-近鄰演算法2約會物件分類

這是KNN的一個新例子。 在一個約會網站裡,每個約會物件有三個特徵: (1)每年獲得的飛行常客里程數(額...這個用來判斷你是不是成功人士?) (2)玩視訊遊戲所耗時間百分比(額...這個用來判斷你是不是肥宅?) (3)每週消費的冰激凌公升數(額...這個是何用意我真不知道

大話資料結構-演算法2

啟示:演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或多個操作演算法定義:演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或多個操作演算法的5個特性:輸入,輸出,又窮性,確定性和可行性    輸