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搭建Memcached(2)
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:IPv6(2)_給計算機配置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個特性:輸入,輸出,又窮性,確定性和可行性 輸