讀Java性能權威指南(第2版)筆記15_垃圾回收B

来源:https://www.cnblogs.com/lying7/archive/2023/03/13/17207459.html
-Advertisement-
Play Games

1. GC觸發條件 1.1. 當新生代滿的時候 1.1.1. Minor GC會被觸發 1.2. 當老年代滿的時候 1.2.1. Full GC會被觸發 1.3. 當堆快要填滿時 1.3.1. 併發GC(如果適用)會被觸發 2. 強制開啟GC 2.1. System.gc()方法 2.1.1. 總是 ...


讀Java性能權威指南(第2版)筆記15_垃圾回收B

1. GC觸發條件

1.1. 當新生代滿的時候

1.1.1. Minor GC會被觸發

1.2. 當老年代滿的時候

1.2.1. Full GC會被觸發

1.3. 當堆快要填滿時

1.3.1. 併發GC(如果適用)會被觸發

2. 強制開啟GC

2.1. System.gc()方法

2.1.1. 總是會觸發Full GC(即使JVM運行的是G1GC或者CMS)

2.1.2. 並不會讓應用程式更高效

2.1.2.1. 只是讓GC比其他情況更早開啟,也只是將性能的影響延遲了

2.1.3. 調用這個方法從來都不是好主意

2.2. 例外

2.2.1. 在做性能監控或基準測試時

2.2.1.1. 對於運行少量代碼的小型基準測試,為了加快預熱JVM,在測量期之前強制執行GC有意義

2.2.2. 對堆進行分析時,在堆轉儲之前強制觸發Full GC是個好主意

2.2.3. 遠程方法調用

2.2.3.1. Remote Method Invocation,RMI

2.2.3.2. 作為分散式垃圾回收器的一部分,它每小時調用一次System.gc()方法

2.2.3.3. -Dsun.rmi.dgc.server.gcInterval=N

2.2.3.4. -Dsun.rmi.dgc.client.gcInterval=N

2.2.3.5. N以毫秒為單位

2.2.3.6. 預設值是3 600 000(1小時)

2.3. -XX:+DisableExplicitGC

2.3.1. 阻止強制GC操作

2.3.2. 預設false

3. CPU使用率

3.1. 要確保CPU告警不是由Full GC引起的100%CPU使用率造成的

3.2. 也不是由後臺併發處理線程引起的CPU高峰持續時間更長(但使用率更低)造成的

3.3. Java應用程式來說是很正常的

4. 選擇GC演算法

4.1. 在JDK 8中,要如何選擇則取決於你的應用程式

4.2. 在單CPU的機器上預設使用Serial垃圾回收器

4.2.1. 包括單個CPU的虛擬機和限制只能使用一個CPU的Docker容器

4.3. 當在單CPU機器上運行CPU密集型應用程式時,即使這個CPU是超線程的,使用Serial垃圾回收器也更有意義

4.4. 如果平均響應時間是最重要的目標,Serial垃圾回收器是更好的選擇

4.5. 在批處理任務中,CPU會在很長一段時間內100%忙碌,Serial垃圾回收器有明顯的優勢

4.6. 堆很小(比如100 MB)的應用程式,無論可用的核心數量是多少,使用Serial垃圾回收器可能都會有更好的表現

4.7. 如果一個長期運行的應用程式線程占用了唯一可用的CPU,那麼G1 GC不是一個好的選擇

4.8. 在JDK 11中,G1 GC通常是更好的選擇

4.9. 對於大多數應用程式來說,G1 GC的演算法是更好的選擇

4.10. 如果你想優化第99百分位響應時間,那麼G1 GC更好

4.11. 在同樣的硬體上處理非CPU密集型任務,G1GC是更好的選擇

4.12. 當你選擇G1 GC時,需要有足夠的CPU供後臺線程運行

4.13. 在CPU周期足夠的情況下,即使Serial垃圾回收器是預設的選擇,G1 GC一般也會表現得更好

4.14. 如果伺服器缺少CPU周期,會導致G1 GC和應用程式線程競爭CPU,那麼G1 GC的響應時間會更長

4.15. 如果更看重交互處理和響應時間,那麼Throughput垃圾回收器很難戰勝G1 GC

4.16. 如果優化伺服器之後沒有了Full GC,那麼G1 GC和Throughput垃圾回收器通常會得到相似的結果

4.16.1. Throughput垃圾回收器遇到的Full GC越多,G1 GC的平均響應時間、第90百分位響應時間和第99百分位響應時間就會越短

4.17. 當應用程式的運行時間是關鍵時,如果Throughput垃圾回收器的應用程式線程停頓時間比G1 GC少,那麼它就更有優勢

4.17.1. 沒有(或很少)Full GC。

4.17.2. 老年代常常是滿的,G1 GC後臺線程有更多工作要做

4.17.3. G1 GC線程亟需CPU周期

4.18. 在多CPU機器上運行CPU密集型任務時,Throughput垃圾回收器更有意義

4.19. 即使任務不是CPU密集型的,如果它產生的Full GC相對較少或者老年代一般是滿的,Throughput垃圾回收器也可能是更好的選擇


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 使用redis作為緩存,必然存在redis緩存和DB數據一致性的問題:某一時刻,redis緩存數據和DB數據不一致 一 緩存更新策略 按照緩存更新的方式大致分為: 記憶體淘汰、過期刪除、主動更新 一) 記憶體淘汰 利用Redis的記憶體淘汰策略,當記憶體不足時自動進行淘汰部分數據,下次查詢時更新緩存, ...
  • 公眾號:MCNU雲原生,文章首發地,歡迎微信搜索關註,更多乾貨,第一時間掌握! @ 一、PostgreSQL是什麼? PostgreSQL是一種開源的關係型資料庫管理系統,也被稱為Postgres。它最初由加拿大電腦科學家Michael Stonebraker在1986年創建,其目標是創建一個具有 ...
  • 頁面發佈-分發dispatch(action(:object),action已被connect(mapStateToProps, mapDispatchToProps)(App)映射到組件props ) reducer里的純函數執行,拿到action里返回的對象數據,賦值給redux中的Store, ...
  • 適配器模式(Adapter Pattern):將一個類的介面轉化為客戶端所期望的介面,使得原本不相容的類可以一起工作。在前端開發中,可以使用適配器模式來處理不同瀏覽器之間的相容性問題。 適配器模式通常包含三個角色:客戶端、目標對象和適配器對象。客戶端調用適配器對象的介面,適配器對象再調用目標對象的接 ...
  • 「和我一起學 XXX」是我 2023 年的一個新企劃,目的是向讀者(也包括未來的自己)介紹我正在學習的某項新技術。文章會通過長期反覆迭代的方式保持其內容的新鮮度。文章有較大內容更新時,會在文章開頭進行更新時間說明(由於時間精力有限,更新的內容只能保障少數幾個平臺的同步,請見諒)。 1. 什麼是 Th ...
  • web
    1. 表格標簽 1.1 表格的主要作用 表格主要是用於顯示、展示數據,因為它可以讓數據顯示的非常的規整,可讀性非常好。特別是後臺展示數據的時候,能夠熟練運用表格就顯得很重要。一個清爽簡約的表格能夠把繁雜的數據表現得很有條理。 總結:表格不是用來佈局頁面的,而是用來展示數據的。 1.2 表格的基本語法 ...
  • 網頁 1. 什麼是網頁 網站是指在網際網路上根據一定的規則,使用HTML等製作的用於展示特定內容相關的網頁集合。 網頁是網站中的一“頁”,通常是HTML格式的文件,它要通過瀏覽器來閱讀。 網頁是構成網站的基本元素,它通常由圖片、鏈接、文字、聲音、視頻等元素組成。通常我們看到的網頁,常見以.htm或.h ...
  • 相關解釋 ​ 在打開瀏覽器的時候會創建出來若幹進程,以便於完成相關任務,其實最重要的是渲染進程。 ​ 渲染進程的主要工作為:解析HTML,繪製CSS樣式,執行JS代碼等。 ​ 其中在執行JS代碼的時候,會根據代碼任務的類型創建出來若幹隊列,其中常見的有: 延時隊列(setInterval,setTi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...