02_JVM

1、JVM虛擬機組成及內存分配

三大部分:

  1. 類裝載子系統
  2. JVM虛擬機
  3. 字節碼執行引擎

其中,JVM虛擬機運行時數據區(內存模型)包含五部分:堆、棧(線程)、方法區(元空間)、本地方法棧、程序計數器。

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

  • 堆:對象等,
  • 棧:方法等,
  • 方法區:常量、靜態變量、類信息
  • 本地方法棧:native修飾的方法、接口,C++實現
  • 程序計數器:記錄線程下一次該執行的位置

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

其中:

  • 所有線程共享:堆、方法區
  • 線程私有:棧、本地方法棧、程序計數器

字節碼執行引擎負責為程序計數器的下一個執行位置做更新。

字節碼執行引擎負責垃圾收集線程。

一個方法對應的幀棧中包括:

  1. 局部變量表
  2. 操作數棧
  3. 動態鏈接
  4. 方法出口

2、GC垃圾回收機制解析

定位到 GC Roots根節點——可達性分析算法

2.1 gc時內部邏輯:

  • Eden space:伊甸園區,屬于年輕代區。gc時判斷存在引用則移動到survivor區。此處無引用,gc,屬于minor gc。
  • Survivor:屬于年輕代,有survivor0、survivor1兩部分,一次gc引用判斷之后,如果還有引用,年齡+1,從0區移動到1區。
  • Old Gen:老年代,存活時間很久的對象(有些判斷邏輯下根據一批對象的內存大小超過一定大小,比如60%直接從Eden移動到老年代)。survivor區中的年齡達到15時,移動到此,當此處內存已滿,無法繼續向此處移動時,內存溢出,OOM。需要full gc,即干掉這塊內存占用。

其中,Eden區與survivor區內存占比8:1。

常用jvm調優工具:

  • jmap
  • jstack
  • Jinfo
  • jvisualvm
  • JConsole
  • 近年國內熱門好用:阿里巴巴Arthas

2.2 調優工具:阿里巴巴Arthas詳解:

Arthas 是一款線上監控診斷產品,通過全局視角實時查看應用 load、內存、gc、線程的狀態信息,并能在不修改應用代碼的情況下,對業務問題進行診斷,包括查看方法調用的出入參、異常,監測方法執行耗時,類加載信息等,大大提升線上問題排查效率。官方文檔十分詳細,地址:https://arthas.aliyun.com/doc/

可以在線解決生產問題。無需 JVM 重啟,無需代碼更改。 Arthas 作為觀察者永遠不會暫停正在運行的線程。

Arthas(阿爾薩斯)能做什么?

幫助解決以下問題:

  1. 這個類從哪個jar包加載到?為什么會報各種類相關的Exception?
  2. 我改的代碼為什么沒有執行到?難道是沒commit?分支搞錯了?
  3. 遇到問題無法線上debug,難道只能通過加日志再重新發布?
  4. 線上遇到某個用戶的數據處理有問題,但線上無法debug,線上無法復現!
  5. 是否有一個全局視角來查看系統的運行狀況?
  6. 有什么辦法可以監控到JVM的實時運行狀態?
  7. 怎么快速定位到應用的熱點,生成火焰圖?
  8. 怎樣直接從JVM內查找某個類的實例?

版本:支持 JDK 6+(4.x 版本不再支持 JDK 6 和 JDK 7),支持 Linux/Mac/Windows,采用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。

2.3 JVM調優的最終目的——減少STW

STW:stop the world,停頓影響。GC操作會暫停用戶線程,如果出現次數頻繁或者操作耗時,影響性能。所以JVM調優的目的是為了減少SWT的影響,從而卡頓減少、提升性能。

3.常用GC機制的特征

  • G1:部分回收,STW時間設置后,在設置的時間內回收,然后繼續,避免堆內存比較大時GC的STW過久。
  • Parallel:jdk8默認回收機制,一次性回收。

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

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

相關文章

基于FPGA控制PCF8591開展ADC采樣,以采樣煙霧模塊輸出模擬電壓為例(IIC通信)

基于FPGA控制PCF8591開展ADC采樣 前言一、芯片手冊閱讀1.設備地址2.字節地址3.IIC通信協議 二、仿真分析三、代碼分析總結視頻演示 前言 這段時間做設計總是遇到一些傳感器模塊輸出模擬電壓,采集模擬電壓進而了解傳感器輸出的濃度占比,在淘寶上找到了一…

在Python和C/C++之間共享std::vector<std::vector<int>>數據

在Python和C/C之間共享std::vector<std::vector>數據 在Python和C/C之間共享嵌套向量數據(std::vector<std::vector<int>>)可以通過幾種方法實現。以下是幾種常見的方法&#xff1a; 方法1: 使用Cython Cython是連接Python和C的很好選擇&#xff0c;它可以…

Linux NVIDIA 顯卡驅動安裝指南(適用于 RHEL/CentOS)

&#x1f4cc; 一、禁用 Nouveau 開源驅動 NVIDIA 閉源驅動與開源的 nouveau 驅動沖突&#xff0c;需先禁用&#xff1a; if [ ! -f /etc/modprobe.d/blacklist-nouveau.conf ]; thenecho -e "blacklist nouveau\noptions nouveau modeset0" | sudo tee /etc/modpr…

Python爬蟲實戰:獲取千庫網各類素材圖片,為設計師提供參考

一、引言 在當今設計領域,豐富的素材積累對設計師而言至關重要。千庫網作為一個素材資源豐富的平臺,擁有海量的各類素材圖片。然而,手動從該網站收集素材不僅耗時,而且效率低下。Python 作為一種功能強大的編程語言,具備豐富的庫和工具,可用于開發高效的爬蟲程序。通過 …

vue截圖-html2canvas

使用html2canvas進行截圖操作 在 Vue 中使用 ??html2canvas?? 將 HTML 元素&#xff08;如包含貝塞爾曲線的 Canvas/SVG&#xff09;轉換為圖片 下載html2canvas npm install html2canvas在頁面中使用&#xff0c;要截取哪個div的內容&#xff0c;先給這個div加一個ref標…

介紹Unity中的Dictionary

在 Unity&#xff08;C#&#xff09;中&#xff0c;Dictionary 是一個非常常用的數據結構&#xff0c;它提供 鍵值對&#xff08;Key-Value Pair&#xff09; 的存儲方式。類似于 Python 的 dict 或 JavaScript 的對象&#xff08;Object&#xff09;&#xff0c;但它是強類型的…

MySQL 常用函數(詳解)

目錄 一、數學函數1.1 四舍五入函數1.2 求絕對值函數二、日期時間函數2.1 獲取當前日期和時間三、字符串函數3.1 字符串拼接函數3.2 提取子字符串函數四、聚合函數4.1 計算平均值函數4.2 計算最大值函數五、轉換函數5.1 類型轉換函數六、總結MySQL 提供了豐富的內置函數,涵蓋了…

SOFA編譯-Ubuntu20.04-SOFA22.12

一、事前說明 單純的編譯sofa是很簡單的&#xff0c;但是想要同時編譯SofaPython3則比較難了&#xff0c;我編譯了v22.12分支&#xff0c;其他版本sofa的編譯也可以參考此篇教程&#xff0c;需注意的是&#xff1a; 1、確定SOFA需要的Python版本&#xff0c;sofa22.12需要的是…

靜態BFD配置

AR2配置 int g0/0/0 ip add 10.10.10.2 quit bfd quit bfd 1 bind peer-ip 10.10.10.1 source-ip 10.10.10.2 auto commit AR1配置 int g0/0/0 ip add 10.10.10.1 int g0/0/1 ip add 10.10.11.1 quit bfd quit bfd 1 bind peer-ip 10.0.12.2 source-ip 10.0.12.1 auto co…

關鍵字where

C# 中的 where 關鍵字主要用在泛型約束&#xff08;Generic Constraints&#xff09;中&#xff0c;目的是對泛型類型參數限制其必須滿足的條件&#xff0c;從而保證類型參數具備特定的能力或特性&#xff0c;增強類型安全和代碼可讀性。 約束寫法說明適用場景舉例C#版本要求w…

Arm核的Ubuntu系統上安裝Wireshark

Arm核的Ubuntu系統上安裝Wireshark 一、安裝wireshark 安裝命令&#xff1a; sudo apt-get install wireshark-qt 如下圖所示&#xff1a; 安裝過程彈出如下界面&#xff1a; 鼠標選擇Yes&#xff0c;點回車鍵確認 安裝完成。 二、打開wireshark 輸入命令行打開wireshark …

編專利或委托他人編專利屬于學術不端行為嗎?

原文鏈接&#xff1a;編專利或委托他人編專利屬于學術不端行為嗎&#xff1f; 自己編專利或委托他人編專利屬于學術不端嗎&#xff1f; 5月4日&#xff0c;一篇題為《針對性護理干預在子宮肌瘤圍手術期的情緒和生活質量臨床應用效果》的論文&#xff0c;受到網友的廣泛議論。…

Music AI Sandbox:打開你的創作新世界

AI 和音樂人的碰撞 其實&#xff0c;Google 早在 2016 年就啟動了一個叫 Magenta 的項目&#xff0c;目標是探索 AI 在音樂和藝術創作上的可能性。一路走來&#xff0c;他們和各種音樂人合作&#xff0c;終于在 2023 年整出了這個 Music AI Sandbox&#xff0c;并且通過 YouTub…

Java游戲服務器開發流水賬(2)開發中Maven的管理

Maven 是一款流行的 Java 項目管理工具&#xff0c;它基于項目對象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的概念來管理項目的構建、依賴和文檔等。游戲服務器開發中也會使用. 項目構建 生命周期管理&#xff1a;Maven 定義了一套清晰的項目構建生…

枚舉 · 例8擴展-校門外的樹:hard

登錄—專業IT筆試面試備考平臺_牛客網 代碼區&#xff1a; #include<algorithm> #include<iostream> #include<vector>using namespace std; struct TREE{int left,right; }; bool compare(const TREE&a,const TREE& b ){if(a.left!b.left){return…

Windows Server 2025 安裝AMD顯卡驅動

運行顯卡驅動安裝程序&#xff0c;會提示出問題。但是此時資源已經解壓 來到驅動路徑 C:\AMD\AMD-Software-Installer\Packages\Drivers\Display\WT6A_INF 打開配置文件&#xff0c;把這兩行替換掉 %ATI% ATI.Mfg, NTamd64.10.0...16299, NTamd64.10.0, NTamd64.6.0, NTamd64.…

為什么 MySQL 用 B+ 樹作為數據的索引,以及在 InnoDB 中數據庫如何通過 B+ 樹索引來存儲數據以及查找數據

http://www.liuzk.com/410.html 索引是一種數據結構&#xff0c;用于幫助我們在大量數據中快速定位到我們想要查找的數據。 索引最形象的比喻就是圖書的目錄了。注意這里的大量&#xff0c;數據量大了索引才顯得有意義&#xff0c;如果我想要在 [1,2,3,4] 中找到 4 這個數據&am…

AWS VPC架構師指南:從零設計企業級云網絡隔離方案

一、VPC核心概念解析 1.1 核心組件 VPC&#xff1a;邏輯隔離的虛擬網絡&#xff0c;可自定義IPv4/IPv6地址范圍&#xff08;CIDR塊&#xff09; 子網&#xff08;Subnet&#xff09;&#xff1a; 公有子網&#xff1a;綁定Internet Gateway&#xff08;IGW&#xff09;&#…

HuggingFace與自然語言處理(從框架學習到經典項目實踐)[ 01 API操作 ]

本教程適用與第一次接觸huggingface與相應框架和對nlp任務感興趣的朋友&#xff0c;該欄目目前更新總結如下&#xff1a; ??Tokenizer??&#xff1a; 支持單句/雙句編碼&#xff0c;自動處理特殊符號和填充。 批量編碼提升效率&#xff0c;適合訓練數據預處理。Datasets?…

【LeetCode 42】接雨水(單調棧、DP、雙指針)

題面&#xff1a; 思路&#xff1a; 能接雨水的點&#xff0c;必然是比兩邊都低&#xff08;小&#xff09;的點。有兩種思路&#xff0c;一種是直接計算每個點的最大貢獻&#xff08;也就是每個點在縱向上最多能接多少水&#xff09;&#xff0c;另一種就是計算每個點在橫向上…