互聯網三高-高性能之JVM調優

1 運行時數據區

????????JVM運行時數據區是Java虛擬機管理的內存核心模塊,主要分為線程共享和線程私有兩部分。

? ? ? ? (1)線程私有

????????????????????????① 程序計數器:存儲當前線程執行字節碼指令的地址,用于分支、循環、異常處理等流程控制?

? ? ? ? ? ? ? ? ? ? ? ??② 虛擬機棧:存儲方法調用的棧幀,包含局部變量表、操作數棧、動態鏈接、方法返回地址等?

? ? ? ? ? ? ? ? ? ? ? ? ③ 本地方法棧:服務于Native方法(如C/C++實現的方法)的執行,結構與虛擬機棧類似?

? ? ? ? (2)線程共享

????????????????????????① 堆:存儲對象實例和數組,是垃圾回收(GC)的主要區域?

????????????????????????② 方法區:存儲類元信息(如類名、字段、方法)、運行時常量池、靜態變量、即時編譯后的代碼等?(JDK 8及之后:元空間(MetaSpace),使用本地內存)

2 三大GC算法

? ? ? ? 2.1 標記-復制算法(年輕代)

? ? ? ? ? ? ? ? 原理:將內存分為兩塊(如Eden區和Survivor區),每次僅使用一塊;存活對象復制到未使用的內存塊,原內存塊整體回收?

? ? ? ? ? ? ? ? 優點:無內存碎片,對象分配效率高?

? ? ? ? ? ? ? ? 缺點:需要一塊內存;復制對象過程比較耗時

? ? ? ? 2.2 標記-清除算法

? ? ? ? ? ? ? ? 原理:從GC Roots出發,標記所有可達對象(標記);回收未被標記的對象即垃圾(清除)?

? ? ? ? ? ? ? ? 優點:實現簡單,無需移動對象

? ? ? ? ? ? ? ? 缺點:有內存碎片問題,可能導致后續大對象分配失敗?

? ? ? ? 2.3 標記-整理算法

? ? ? ? ? ? ? ? 原理:從GC Roots出發,標記所有可達對象(標記);將存活對象向內存一端移動,清理邊界外的空間?(整理)

? ? ? ? ? ? ? ? 優點:避免內存碎片,支持連續內存分配?

? ? ? ? ? ? ? ? 缺點:整理過程需STW;復制對象過程比較耗時

? ? ? ? 無論什么GC回收算法,第一階段都是標記,根據根可達性分析,從GC Roots出發開始遍歷訪問,找出有效對象。

? ? ? ? 2.4 標記算法—三色標記法

? ? ? ? ? ? ? ? 三色

? ? ? ? ? ? ? ? ? ? ? ? ① 白色:尚未遍歷過

? ? ? ? ? ? ? ? ? ? ? ? ② 黑色:本對象已經遍歷過,而且本對象引用的其他對象也全部遍歷過

? ? ? ? ? ? ? ? ? ? ? ? ③?灰色:本對象已經遍歷過,而且本對象引用的其他對象尚未全部遍歷完

? ? ? ? ? ? ? ? 基本流程

? ? ? ? ? ? ? ? ? ? ? ? ① 初始階段:所有對象都在【白色集合】中

? ? ? ? ? ? ? ? ? ? ? ? ② 將GC Roots直接引用的對象挪到【灰色集合】中,并將其從【白色集合】中去掉

? ? ? ? ? ? ? ? ? ? ? ? ③ 從【灰色集合】中獲取對象,將本對象引用的其他對象全部挪到【灰色集合】中,并從【白色集合】中去掉,將本對象挪到黑色集合中

? ? ? ? ? ? ? ? ? ? ? ? ④ 重復 步驟③ 操作,直至【灰色集合】為空時結束

? ? ? ? ? ? ? ? ? ? ? ? ⑤ 結束后,仍在【白色集合】中的對象就是垃圾,可以回收

說明:圖片引用自?https://zhuanlan.zhihu.com/p/664929804?utm_id=0

3 常見垃圾收集器

? ? ? ? 3.1 新生代(標記-復制算法)

? ? ? ? ? ? ? ? Serial New:單線程收集器

? ? ? ? ? ? ? ? ParNew:并行收集器(Serial多線程版本)

? ? ? ? ? ? ? ? Parallel Scavenge:并行回收,追求高吞吐量,高效利用CPU

? ? ? ? 3.2 老年代

????????????????Serial Old:單線程收集器(標記-整理算法)

????????????????Parallel Old:并行收集器(標記-整理算法)

? ? ? ? ? ? ? ? CMS:以?低停頓?為目標,分階段并發執行<初始標記、并發標記、重新標記、并發清除>(標記-整理算法)

? ? ? ? ? ? ? ? ? ? ? ? (1)步驟:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ①?初始標記:SWT,僅標記GC Roots能直接關聯的對象,速度比較快

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ②?并發標記:可以和用戶線程并發執行,通過GC Roots可達性算法標記所有可達對象

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ③?重新標記:STW,對并發標記階段產生的垃圾對象進行標記修正,以及更新逃逸對象

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ④?并發清除:可以和用戶線程并發執行,清除可回收對象

? ? ? ? ? ? ? ? ? ? ? ? (2)優點:支持并發收集,低停頓,能保證短時間內執行完成,達到近似并發目的

? ? ? ? ? ? ? ? ? ? ? ? (3)缺點:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ① 無法清理浮動對象

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ② 使用標記-清除算法,會產生大量內存碎片

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ③ 必須要在老年代用盡之前完成垃圾回收,否則會觸發擔保機制,退化成Serial Old收集器來進行垃圾回收,效率低下

? ? ? ? ? ? ? ? ? ? ? ? (4)使用場景:老年代垃圾回收,需低停頓的交互式應用;堆內存不宜過大(避免并發標記耗時過長)?

? ? ? ? ? ? ? ? ? ? ? ? (5)配置參數

????????????????????????????????-XX:+UseConcMarkSweepGC:啟用CMS收集器?

????????????????????????????????-XX:CMSInitiatingOccupancyFraction:設置觸發CMS回收的老年代使用率閾值(默認92%)?

????????????????????????????????-XX:+CMSParallelRemarkEnabled:啟用并行重新標記(減少重新標記時間)?

? ? ? ? 3.3 不分代

? ? ? ? ? ? ? ? G1:將堆劃分為多個大小相等的Region,采用?標記-整理算法?(全局)和?標記-復制算法?(局部)

? ? ? ? ? ? ? ? ? ? ? ? (1)原理:分治法,將堆分成若干個等大的區域Region(默認2048個,每個1-32MB)

????????????????????????(2)優點: ?低停頓;基于標記-整理算法無內存碎片;大堆友好?,支持TB級堆內存

? ? ? ? ? ? ? ? ? ? ? ? (3)缺點:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ①?內存占用?:維護RSet(記憶集)和CSet(回收集)需額外內存?

????????????????????????????????② CPU消耗?:并發標記和RSet更新增加CPU開銷?

????????????????????????????????③ 復雜調優?:需平衡停頓時間、吞吐量和Region大小等參數?

? ? ? ? ? ? ? ? ? ? ? ? (4)使用場景:大內存服務端應用;低延遲需求?;JDK 9+默認收集器?

? ? ? ? ? ? ? ? ? ? ? ? (5)配置參數

????????????????????????????????-XX:+UseG1GC:啟用G1收集器?

????????????????????????????????-XX:MaxGCPauseMillis:設置最大GC停頓時間目標(默認200ms)?

????????????????????????????????-XX:G1HeapRegionSize:指定Region大小(需為2的冪)?

????????????????????????????????-XX:G1MixedGCLiveThresholdPercent:設置混合GC中Region存活對象占比閾值(默認85%,高于此值不回收)?

????????????????ZGC:基于?并發標記-整理算法?,使用染色指針和讀屏障技術,實現亞毫秒級停頓(支持TB級堆內存管理)

4 JDK各版本默認使用垃圾收集器

?????????≤1.5??? ?Serial + Serial Old

????????1.8??? ?Parallel Scavenge+ Parallel Old

????????9~21??? ?G1

????????11/17/21??? ?新增ZGC/Shenandoah/Epsilon

通過命令行查看當前JDK默認垃圾收集器
java -XX:+PrintCommandLineFlags -version

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

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

相關文章

淺談StarRocks 常見問題解析

StarRocks數據庫作為高性能分布式分析數據庫&#xff0c;其常見問題及解決方案涵蓋環境部署、數據操作、系統穩定性、安全管控及生態集成五大核心領域&#xff0c;需確保Linux系統環境、依賴庫及環境變量配置嚴格符合官方要求以避免節點啟動失敗&#xff0c;數據導入需遵循格式…

P1332 血色先鋒隊(BFS)

題目背景 巫妖王的天災軍團終于卷土重來&#xff0c;血色十字軍組織了一支先鋒軍前往諾森德大陸對抗天災軍團&#xff0c;以及一切沾有亡靈氣息的生物。孤立于聯盟和部落的血色先鋒軍很快就遭到了天災軍團的重重包圍&#xff0c;現在他們將主力只好聚集了起來&#xff0c;以抵…

大文件上傳之斷點續傳實現方案與原理詳解

一、實現原理 文件分塊&#xff1a;將大文件切割為固定大小的塊&#xff08;如5MB&#xff09; 進度記錄&#xff1a;持久化存儲已上傳分塊信息 續傳能力&#xff1a;上傳中斷后根據記錄繼續上傳未完成塊 塊校驗機制&#xff1a;通過哈希值驗證塊完整性 合并策略&#xff1a;所…

【動手學深度學習】卷積神經網絡(CNN)入門

【動手學深度學習】卷積神經網絡&#xff08;CNN&#xff09;入門 1&#xff0c;卷積神經網絡簡介2&#xff0c;卷積層2.1&#xff0c;互相關運算原理2.2&#xff0c;互相關運算實現2.3&#xff0c;實現卷積層 3&#xff0c;卷積層的簡單應用&#xff1a;邊緣檢測3.1&#xff0…

Opencv計算機視覺編程攻略-第十一節 三維重建

此處重點討論在特定條件下&#xff0c;重建場景的三維結構和相機的三維姿態的一些應用實現。下面是完整投影公式最通用的表示方式。 在上述公式中&#xff0c;可以了解到&#xff0c;真實物體轉為平面之后&#xff0c;s系數丟失了&#xff0c;因而無法會的三維坐標&#xff0c;…

大廠不再招測試?軟件測試左移開發合理嗎?

&#x1f449;目錄 1 軟件測試發展史 2 測試左移&#xff08;Testing shift left&#xff09; 3 測試右移&#xff08;Testing shift right&#xff09; 4 自動化測試 VS 測試自動化 5 來自 EX 測試的寄語 最近兩年&#xff0c;互聯網大廠的招聘中&#xff0c;測試工程師崗位似…

windows10下PointNet官方代碼Pytorch實現

PointNet模型運行 1.下載源碼并安裝環境 GitCode - 全球開發者的開源社區,開源代碼托管平臺GitCode是面向全球開發者的開源社區,包括原創博客,開源代碼托管,代碼協作,項目管理等。與開發者社區互動,提升您的研發效率和質量。https://gitcode.com/gh_mirrors/po/pointnet.pyto…

git pull 和 git fetch

關于 git pull 和 git fetch 的區別 1. git fetch 作用&#xff1a;從遠程倉庫獲取最新的分支信息和提交記錄&#xff0c;但不會自動合并或修改當前工作目錄中的內容。特點&#xff1a; 它只是更新本地的遠程分支引用&#xff08;例如 remotes/origin/suyuhan&#xff09;&am…

前端開發中的單引號(‘ ‘)、雙引號( )和反引號( `)使用

前端開發中的單引號&#xff08;’ &#xff09;、雙引號&#xff08;" "&#xff09;和反引號&#xff08; &#xff09;使用 在前端開發中&#xff0c;單引號&#xff08;’ &#xff09;、雙引號&#xff08;" "&#xff09;和反引號&#xff08; &…

程序化廣告行業(69/89):DMP與PCP系統核心功能剖析

程序化廣告行業&#xff08;69/89&#xff09;&#xff1a;DMP與PCP系統核心功能剖析 在數字化營銷浪潮中&#xff0c;程序化廣告已成為企業精準觸達目標受眾的關鍵手段。作為行業探索者&#xff0c;我深知其中知識的繁雜與重要性。一直以來&#xff0c;都希望能和大家一同學習…

Amodal3R ,南洋理工推出的 3D 生成模型

Amodal3R 是一款先進的條件式 3D 生成模型&#xff0c;能夠從部分可見的 2D 物體圖像中推斷并重建完整的 3D 結構與外觀。該模型建立在基礎的 3D 生成模型 TRELLIS 之上&#xff0c;通過引入掩碼加權多頭交叉注意力機制與遮擋感知注意力層&#xff0c;利用遮擋先驗知識優化重建…

LLM面試題八

推薦算法工程師面試題 二分類的分類損失函數&#xff1f; 二分類的分類損失函數一般采用交叉熵(Cross Entropy)損失函數&#xff0c;即CE損失函數。二分類問題的CE損失函數可以寫成&#xff1a;其中&#xff0c;y是真實標簽&#xff0c;p是預測標簽&#xff0c;取值為0或1。 …

30天學Java第7天——IO流

概述 基本概念 輸入流&#xff1a;從硬盤到內存。&#xff08;輸入又叫做 讀 read&#xff09;輸出流&#xff1a;從內存到硬盤。&#xff08;輸出又叫做 寫 write&#xff09;字節流&#xff1a;一次讀取一個字節。適合非文本數據&#xff0c;它是萬能的&#xff0c;啥都能讀…

面試可能會遇到的問題回答(嵌入式軟件開發部分)

寫在前面&#xff1a; 博主也是剛入社會的小牛馬&#xff0c;如果下面有寫的不好或者寫錯的地方歡迎大家指出~ 一、四大件基礎知識 1、計算機組成原理 &#xff08;1&#xff09;簡單介紹一下中斷是什么。 ①回答&#xff1a; ②難度系數&#xff1a;★★ ③難點分析&…

層歸一化詳解及在 Stable Diffusion 中的應用分析

在深度學習中&#xff0c;歸一化&#xff08;Normalization&#xff09;技術被廣泛用于提升模型訓練的穩定性和收斂速度。本文將詳細介紹幾種常見的歸一化方式&#xff0c;并重點分析它們在 Stable Diffusion 模型中的實際使用場景。 一、常見的歸一化技術 名稱歸一化維度應用…

深入理解Socket編程:構建簡單的計算器服務器

一、Socket通信基礎 1. Socket通信基本流程 服務器端流程&#xff1a; 創建Socket (socket()) 綁定地址和端口 (bind()) 監聽連接 (listen()) 接受連接 (accept()) 數據通信 (read()/write()) 關閉連接 (close()) 客戶端流程&#xff1a; 創建Socket (socket()) 連接…

Redis-x64-3.2.100.msi : Windows 安裝包(MSI 格式)安裝步驟

Redis-x64-3.2.100.msi 是 Redis 的 Windows 安裝包&#xff08;MSI 格式&#xff09;&#xff0c;適用于 64 位系統。 在由于一些環境需要低版本的Redis的安裝包。 Redis-x64-3.2.100.msi 安裝包下載&#xff1a;https://pan.quark.cn/s/cc4d38262a15 Redis 是一個開源的 內…

4.7正則表達式

1.字符匹配 一般字符匹配自身. 匹配任意字符(換行符\n除外),一個點占一位\轉義字符&#xff0c;使其后一個字符改變原來的意思(\.就是.)[......]字符集,對應的位置可以是字符集中的任意字符.字符集中的字符可以逐個列出,也可以給出范圍如[abc]或[a-c] [^abc] 表示取反&#xf…

Fortran 中讀取 MATLAB 生成的數據文件

在 Fortran 中讀取 MATLAB 生成的數據文件&#xff0c;可以通過以下幾種方法實現&#xff0c;包括使用開源工具和手動解析&#xff1a; 1. 使用開源工具&#xff1a;MATFOR MATFOR 是一個商業/開源混合工具&#xff08;部分功能免費&#xff09;&#xff0c;提供 Fortran 與 M…

壓測工具開發實戰篇(四)——client子窗口功能

你好&#xff0c;我是安然無虞。 文章目錄 樹控件添加文件補充學習: 函數定義中循環體里的局部變量補充學習: 動態添加對象屬性 刷新文件上下文菜單 (右鍵菜單)實現右鍵菜單功能 編輯節點文本 在學習本篇文章之前, 建議先看一下上篇介紹MDI子窗口的文章: 壓測工具開發實戰篇(三…