JVM學習-垃圾回收器(一)

垃圾回收器

按線程數分類
  • 串行垃圾回收器
  • 串行回收是在同一時間段內只允許有一個CPU用于執行垃圾回收操作,此時工作線程被暫停,直至垃圾收集工作結束
    • 在諸如單CPU處理器或者較小的應用內存等硬件平臺不是特別優越的場合,串行回收器的性能表現可以超過并行回收器和并發回收器。所以,串行回收默認被應用在客戶端的Client模式下的JVM中
    • 在并發能力比較強的CPU上,并行回收器產生的停頓時間要短于串行回收器
  • 和串行回收相反,并行收集可以運用多個CPU同時執行垃圾回收,因此提升了應用吞吐量,不過并行回收仍然與串行一樣,采用獨占式,使用了“Stop-The-world”機制
  • 并行垃圾回收器
按工作模式
  • 并發式垃圾回收器
    并發式垃圾回收器與應用線程交替工作,以盡可能減少應用程序的停頓時間
  • 獨占式垃圾回收器
    獨占式垃圾回收器一旦運行,就停止應用程序中的所有用戶線程,直到垃圾回收過程完全結束
按碎片處理方式
  • 壓縮式垃圾回收器
  • 壓縮式垃圾回收器會在回收完成后,對存活對象進行壓縮整理,消除回收后的碎片----再分配對象空間使用:指針碰撞
  • 非壓縮式垃圾回收器
  • 再分配對象使用:空閑列表
按工作內存區間分
  • 年輕代垃圾回收器
  • 老年代垃圾回收器
評估GC性能指標

- 吞吐量:運行用戶代碼的時間占總運行時間的比例(總運行時間:程序運行時間+內存回收時間)
- 暫停時間:執行垃圾收集時,程序的工作線程被暫停的時間

  • 垃圾收集開銷:吞吐量的補數,垃圾收集所用時間與總運行時間的比例
  • 收集頻率:相對于應用程序的執行,收集操作發生的頻率
    - 內存占用:Java堆區所占的內存大小
  • 快速:一個對象從誕生到被回收所經歷的時間
    注:
  • 上述加粗三項共同構成了一個“不可能三角”,三者總體的表現會隨著技術進步而越來越好,一款優秀的收集器通常最多同時滿足其中的兩項
  • 這三項里,暫停時間的重要性日益凸顯。因為隨著硬件發展,內存占用多些越來越能容忍,硬件性能的提升也有助于降低收集器運行時對應用程序的影響,即提高了吞吐量。而內存的擴大,對延遲反而帶來負責效果
  • 簡單說,主要抓兩點即吞吐量和暫停時間
吞吐量
  • 吞吐量是CPU用于運行用戶代碼的時間與CPU總消耗時間的比值,即吞吐量 = 運行用戶代碼時間/(運行用戶代碼時間 + 垃圾收集時間)
  • 比如,虛擬機總共運行了100分鐘,其中垃圾回收花掉1分鐘,那吞吐量99%
  • 應用程序能容忍較高的暫停時間,因此,高吞吐量的應用程序有更長的時間基準,快速響應是不必考慮的
  • 吞吐量優先,意味著單位時間內,STW的時間最短0.2 + 0.2 = 0.4
    在這里插入圖片描述
暫停時間
  • 暫停時間是指一個時間段內應用程序線程暫停,讓GC線程執行的狀態
  • 暫停時間優先,意味著盡可能讓單次STW的時間最短:0.1+0.1+0.1+0.1+0.1=0.5
    在這里插入圖片描述
吞吐量VS暫停時間
  • 高吞吐量較好因為應用程序的最終用戶感覺只有應用程序線程在做生產性工作,直覺上,吞吐量越高程序運行越快
  • 低暫停時間較好因為從最終用戶的角度來看不管是GC還是其他原因導致一個應用被掛起始終是不好的,這取決于應用程序的類型,有時候甚至短暫的200ms暫停都可能打斷終端用戶體驗,因此,具有低的較在暫停時間是非常重要的,特別對于一個交互式應用程序
  • 高吞吐量和低暫停時間是一對相互競爭的目標(矛盾)
  • 如果選擇以吞吐量優先,那么必然需要降低內存回收的執行頻率,但是這樣會導致GC需要更長的暫停時間來執行內存回收
  • 如果選擇低延遲優先,那么為了降低每次執行內存回收時的暫停時間,只能頻繁地執行內存回收,這又引起了年輕代內存的縮減和導致程序吞吐量下降
    注:現在標準–在最大吞吐量優先的情況下,降低停頓時間
經典垃圾收集器
  • 串行垃圾收集器:Serial、Serial Old
  • 并行垃圾收集器:ParNew、Parallel Scavenge、Parallel Old
  • 并發垃圾回收器:CMS、G1
    在這里插入圖片描述
查看默認的垃圾收集器
  • -XX:+PrintCommandLineFlags:查看命令行相關參數(包含使用的垃圾收集器)
  • 使用命令行指令:jinfo -flag 相關垃圾回收器參數 進程ID
Serial回收器:串行回收
  • Serial收集器是最基本、歷史最悠久的收集器JDK1.3之前新生代唯一的選擇
  • Hotpot中Client模式下的默認新生代垃圾收集器
  • 采用復制算法,串行回收“Stop-the-world”機制的方式執行內存回收
  • 除了年輕代之外,Serial收集器還提供用于執行老年代垃圾收集的Serial Old收集器,Serial Old收集器同樣采用了串行回收和“Stop-the-world”機制,只不過內存回收算法使用的是標記-壓縮算法
  • Serial Old是運行在Client模式下的默認老年代垃圾回收器
  • Serial Old在Server模式下有兩個用途①與新生代Parallel Scavenge配合使用②作為老年代CMS收集器的后備垃圾收集方案
  • 優勢:簡單而高效,對于限定單個CPU的環境來說,Serial由于沒有線程交互的開銷,專心做垃圾收集
  • 在用戶的桌面應用場景中,可用內存一般不大,可以在較短時間內完成垃圾收集,只要不頻繁發生,使用串行回收器可以接受
  • 在Hotspot虛擬機中,使用-XX:+UseSerialGC參數可以指定年輕代和老年代都使用Serial
    在這里插入圖片描述
    注:Serial收集器是一個單線程收集器,單線程不僅僅說明它只會使用一個CPU或一條收集線程去完成垃圾收集工作,更重要的是在它進行垃圾收集時,必須暫停其他所有的工作線程,直到它收集結束(Stop The World)

待續… …

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13875.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13875.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13875.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

http和https的區別,怎么免費實現https(內涵教學)

超文本傳輸協議HTTP協議被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此&…

etcd 和 MongoDB 的混沌(故障注入)測試方法

最近在對一些自建的數據庫 driver/client 基礎庫的健壯性做混沌(故障)測試, 去驗證了解業務的故障處理機制和恢復時長. 主要涉及到了 MongoDB 和 etcd 這兩個基礎組件. 本文會介紹下相關的測試方法. MongoDB 中的故障測試 MongoDB 是比較世界上熱門的文…

AI網絡爬蟲:批量爬取電視貓上面的《慶余年》分集劇情

電視貓上面有《慶余年》分集劇情&#xff0c;如何批量爬取下來呢&#xff1f; 先找到每集的鏈接地址&#xff0c;都在這個class"epipage clear"的div標簽里面的li標簽下面的a標簽里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 這個…

速盾:負載均衡能防ddos攻擊嗎?

負載均衡是一種分布式系統的設計思想&#xff0c;通過將流量分散到多個服務器上&#xff0c;以提高系統的穩定性和可擴展性。然而&#xff0c;負載均衡本身并不能完全防止DDoS攻擊&#xff0c;但可以在一定程度上減輕其影響。 DDoS&#xff08;分布式拒絕服務&#xff09;攻擊…

【C語言】8.C語言操作符詳解(1)

文章目錄 1.操作符的分類2.?進制和進制轉換3.原碼、反碼、補碼4.移位操作符4.1 左移操作符4.2 右移操作符 5.位操作符&#xff1a;&、|、^、~5.1 &&#xff1a;按位與5.2 |&#xff1a;按位或5.3 ^&#xff1a;按位異或5.4 ~&#xff1a;按位取反5.5 例題例題1例題2例…

短視頻矩陣系統4年獨立開發正規代發布接口源碼搭建部署開發

1. 短視頻矩陣源碼技術開發要求及實現流程&#xff1a; 短視頻矩陣源碼開發要求具備視頻錄制、編輯、剪輯、分享等基本功能&#xff0c;支持實時濾鏡、特效、音樂等個性化編輯&#xff0c;能夠實現高效的視頻渲染和處理。開發流程主要包括需求分析、技術選型、設計架構、編碼實…

Web前端開發技術、詳細文章、(例子)html 列表、有序列表、無序列表、列表嵌套

目錄 列表概述 列表類型與標記符號 無序列表 語法&#xff1a; 語法說明&#xff1a; 無序列表標記的 type 屬性及其說明 代碼解釋 有序列表 基本語法 屬性說明 1、列表 o1標記的屬性 2、列表項li標記的屬性 有序列表 o1標記的屬性、值 代碼解釋 列表嵌套 基本…

如何將Qt pro工程文件 改成CMakeLists.txt

Qt pro工程管理文件&#xff0c;本人認為是很好用的&#xff0c;語法簡潔易懂&#xff0c;但是只能在QtCreator中使用&#xff0c;想用使用其它IDE比如Clion或者vs&#xff0c;CMakeLists是種通用的選擇&#xff0c;另外QtCreator的調試功能跟粑粑一樣。 一&#xff0c;思路 …

FreeBSD/Linux下的系統資源監視器排隊隊

bpytop bpytop 是一個基于 Python 的資源監視器&#xff0c;可以在 FreeBSD 上使用。它提供了對文件寫入磁盤、網絡、CPU 和內存占用的監視功能。 pkg install bpytop 或者用ports安裝 cd /usr/ports/sysutils/bpytop/ make install clean bashtop bashtop 也是一個基于 P…

化簡資源分配圖判斷是否發生死鎖

目錄 1.資源分配圖的概念 2.判斷是否發生死鎖 1.資源分配圖的概念 資源分配圖表示進程和資源之間的請求關系&#xff0c;例如下圖&#xff1a; P代表進程&#xff0c;R代表資源&#xff0c;R方框中 有幾個圓球就表示有幾個這種資源&#xff0c;在圖中&#xff0c;R1指向P1&a…

C++ RPC ORM 高速解析

支持所有常用編程語 https://capnproto.org/GitHub - capnproto/capnproto: Capn Proto serialization/RPC system - core tools and C library https://capnproto.org/capnproto-c-win32-1.0.2.zip 常用命令&#xff1a; capnp help capnp compile -oc myschema.capn…

java文件上傳時給pdf、word、excel、ppt、圖片添加水印

前言 在開發的過程中&#xff0c;因為文件的特殊性&#xff0c;需要給pdf、word、excel、ppt、圖片添加水印。添加水印可以在文件上傳時添加&#xff0c;也可以在文件下載時添加。因為業務的某些原因&#xff0c;文件需要在瀏覽器預覽&#xff0c;如果用戶將文件另存為則無法添…

算法與數據結構匯總

基本 數組 字符串 排序 矩陣 模擬 枚舉 字符串匹配 桶排序 計數排序 基數排序 回文&#xff1a;中心擴展 馬拉車 樹上啟發式合并 括號 數學表達式 字符串&#xff1a;前后綴分解。 貢獻法 分組&#xff1a; 【狀態機dp 狀態壓縮 分組】1994. 好子集的數目 【動態規劃】【前綴…

Excel中sum的跨表求和

#實際工作中&#xff0c;一個xlsx文件中會包含多個Excel表格&#xff0c;一般會有“總-分”的關系&#xff0c;如何把分表里的數字匯總到總表里呢&#xff1f; 一般有上圖所示的兩種表達方式。 可以使用通配符 *&#xff1a;代表任意個數、任意字符&#xff1b; &#xff1f;&…

51單片機的最小系統詳解

51單片機的最小系統詳解 1. 引言 在嵌入式系統中,51單片機被廣泛應用于各種小型控制器和嵌入式開發板中。相信很多人都接觸過51單片機,但是對于51單片機的最小系統卻了解得不夠深入。本文將從振蕩電路、電源模塊、復位電路、LED指示燈和調試接口五個方面詳細介紹51單片機的…

quartz定時任務

Quartz 數據結構 quartz采用完全二叉樹&#xff1a;除了最后一層每一層節點都是滿的&#xff0c;而且最后一層靠左排列。 二叉樹節點個數規則&#xff1a;每層從左開始&#xff0c;第一層只有一個&#xff0c;就是2的0次冪&#xff0c;第二層兩個就是2的1次冪&#xff0c;第三…

DOS學習-目錄與文件應用操作經典案例-attrib

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一.前言 二.使用 三.案例 一.前言 DOS系統中的attrib命令是一個用于顯示或更改文件&#…

設計模式——職責鏈(責任鏈)模式

目錄 職責鏈模式 小俱求實習 結構圖 實例 職責鏈模式優點 職責鏈模式缺點 使用場景 1.springmvc流程 ?2.mybatis的執行流程 3.spring的過濾器和攔截器 職責鏈模式 使多個對象都有機會處理請求&#xff0c;從而避免請求的發送者和接受者之間的耦合關系。將這個對象連成…

github設置項目分類

https://www.php.cn/faq/541957.html https://docs.github.com/zh/repositories/working-with-files/managing-files/creating-new-files

什么是回表,如何解決回表問題

下面表中:主鍵id是聚簇索引&#xff0c;name是輔助索引。 執行這樣一條SQL: select name from A where name"s;name字段是有索引&#xff0c;所以MYSQL在通過name進行査詢的時候&#xff0c;是需要掃描兩顆Btree樹的。 第一遍:先通過二級索引定位主鍵值1。第二遍:根據主鍵…