JVM虛擬機:內存結構、垃圾回收、性能優化

1、JVM虛擬機的簡介

Java 虛擬機(Java Virtual Machine 簡稱:JVM)是運行所有 Java 程序的抽象計算機,是 Java 語言的運行環境,實現了 Java 程序的跨平臺特性。JVM 屏蔽了與具體操作系統平臺相關的信息,使得 Java 程序只需生成在 JVM 上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行?。

1.1 JVM 的基本組成

JVM 主要由以下幾個部分組成:

  1. 類加載器?:負責將 .class 文件加載到內存中。
  2. ?執行引擎?:負責解釋執行字節碼或通過即時編譯(JIT)將其轉換為機器碼。
  3. ?運行時數據區?:包括堆、棧、方法區和程序計數器等,用于存儲程序運行時的數據和狀態。
  4. ?本地接口?:用于融合不同的編程語言,雖然使用較少,但在需要與硬件交互時仍然重要?。

1.2 JVM 的運行流程

  1. 編譯?:Java 源代碼通過 javac 編譯器編譯成字節碼(.class文件)。
  2. ?類加載?:類加載器將字節碼文件加載到 JVM 的內存中。
  3. ?執行?:執行引擎解釋或編譯字節碼,并提交操作系統執行。
  4. ?垃圾回收?:自動管理內存,防止內存泄漏和溢出?。

1.3 JVM 的跨平臺特性

JVM 的跨平臺特性使得 Java 程序可以在任何支持 JVM 的操作系統上運行,實現了“一次編寫,到處運行”(Write Once, Run Anywhere, WORA)的目標。這是通過 JVM 屏蔽底層硬件和操作系統的差異,提供統一的字節碼規范來實現的?。

2、JVM 的內存結構

JVM 在執行 Java 程序的時候,為了便于管理,會把它所管理的內存劃分為多個不同區域。

JVM 的內存結果如下圖:

2.1 字節碼文件(class 文件)

字節碼文件(class 文件)是 Java 程序編譯后生成的中間代碼,這些中間代碼將會被 JVM 解析并執行。字節碼文件是 Java 源代碼(.java)編譯后生成的中間代碼文件(.class),采用二進制格式存儲,包含 JVM 可執行的指令集。與機器碼不同,字節碼是平臺無關的中間表示,需由 JVM 解釋或即時編譯(JIT)為機器碼執行。

2.2 類加載器(ClassLoader)

類加載器子系統負責把 class 文件轉載到內存中,供虛擬機執行。

2.3 方法區(Method Area)

方法區用來存儲被虛擬機加載的類信息、常量、靜態變量、編譯器編譯后的代碼等數據。在類加載器加載 class 文件的時候,這些信息將會被提起出來,并存儲到方法區中。由于這個區域是所有線程共享的區域,因此,它被設計為線程安全的。方法區可以被看出 JVM 的一個規范,在 HotSpor 中,方法區是用 Perm 區來實現的方法區。

2.4 ?堆(Heap)

堆是虛擬機啟動的時候創建的被所有線程共享的區域。這塊區域只要用來存儲對象的實例,通過 new 操作創建出來的對象的實例都存儲在堆空間中,因此,堆就成為垃圾回收器管理的重點區域。

2.5 程序計數器(Program Counter Register)

程序計數器用于記錄當前線程執行字節碼的指令地址(行號指示器&#x

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

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

相關文章

c++ 面試題(1)-----深度優先搜索(DFS)實現

操作系統:ubuntu22.04 IDE:Visual Studio Code 編程語言:C11 題目描述 地上有一個 m 行 n 列的方格,從坐標 [0,0] 起始。一個機器人可以從某一格移動到上下左右四個格子,但不能進入行坐標和列坐標的數位之和大于 k 的格子。 例…

【匯編逆向系列】七、函數調用包含多個參數之浮點型- XMM0-3寄存器

目錄 1. 匯編代碼 1.1 debug編譯 1.2 release編譯 2. 匯編分析 2.1 浮點參數傳遞規則 2.2 棧幀rsp的變化時序 2.3 參數的訪問邏輯 2.4 返回值XMM0寄存器 3. 匯編轉化 3.1 Debug編譯 3.2 Release 編譯 3.3 C語言轉化 1. 匯編代碼 上一節介紹了整型的函數傳參&#x…

華為云Flexus+DeepSeek征文 | 從零到一:用Flexus云服務打造低延遲聯網搜索Agent

作者簡介 我是摘星,一名專注于云計算和AI技術的開發者。本次通過華為云MaaS平臺體驗DeepSeek系列模型,將實際使用經驗分享給大家,希望能幫助開發者快速掌握華為云AI服務的核心能力。 目錄 作者簡介 前言 1. 項目背景與技術選型 1.1 項目…

【多智能體】受木偶戲啟發實現多智能體協作編排

😊你好,我是小航,一個正在變禿、變強的文藝傾年。 🔔本專欄《人工智能》旨在記錄最新的科研前沿,包括大模型、具身智能、智能體等相關領域,期待與你一同探索、學習、進步,一起卷起來叭&#xff…

Java八股文——Spring篇

文章目錄 Java八股文專欄其它文章Java八股文——Spring篇SpringSpring的IoC和AOPSpring IoC實現機制Spring AOP實現機制 動態代理JDK ProxyCGLIBByteBuddy Spring框架中的單例Bean是線程安全的嗎?什么是AOP,你們項目中有沒有使用到AOPSpring中的事務是如…

NineData數據庫DevOps功能全面支持百度智能云向量數據庫 VectorDB,助力企業 AI 應用高效落地

NineData 的數據庫 DevOps 解決方案已完成對百度智能云向量數據庫 VectorDB 的全鏈路適配,成為國內首批提供 VectorDB 原生操作能力的服務商。此次合作聚焦 AI 開發核心場景,通過標準化 SQL 工作臺與細粒度權限管控兩大能力,助力企業安全高效…

開源技術驅動下的上市公司財務主數據管理實踐

開源技術驅動下的上市公司財務主數據管理實踐 —— 以人造板制造業為例 引言:財務主數據的戰略價值與行業挑戰 在資本市場監管日益嚴格與企業數字化轉型的雙重驅動下,財務主數據已成為上市公司財務治理的核心基礎設施。對于人造板制造業而言&#xff0…

借助它,普轉也能獲得空轉信息?

在生命科學研究領域,轉錄組技術是探索基因表達奧秘的有力工具,在疾病機制探索、生物發育進程解析等諸多方面取得了顯著進展。然而,隨著研究的深入,研究人員發現普通轉錄組只能提供整體樣本中的基因表達水平信息,卻無法…

synchronized 學習

學習源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.應用場景 不超賣,也要考慮性能問題(場景) 2.常見面試問題: sync出…

Java事務回滾詳解

一、什么是事務回滾? 事務回滾指的是:當執行過程中發生異常時,之前對數據庫所做的更改全部撤銷,數據庫狀態恢復到事務開始前的狀態。這是數據庫“原子性”原則的體現。 二、Spring 中的 Transactional 默認行為 在 Spring 中&am…

云災備數據復制技術研究

云災備數據復制技術:數字時代的“安全氣囊” 在當今信息化時代,數據就像城市的“生命線”,一旦中斷,后果不堪設想。想象一下,如果政務系統突然崩潰,成千上萬的市民服務將陷入癱瘓。這就是云災備技術的重要…

如何處理Shopify主題的顯示問題:實用排查與修復指南

在Shopify店鋪運營過程中,主題顯示問題是影響用戶體驗與品牌形象的常見痛點。可能是字體錯位、圖片無法加載、移動端顯示混亂、功能失效等,這些都可能造成客戶流失和轉化下降。 本文將從問題識別、原因分析、修復方法到開發者建議全方位解讀如何高效解決…

前端監控方案詳解

一、前端監控方案是什么? 前端監控方案是一套系統化的工具和流程,用于收集、分析和報告網站或Web應用在前端運行時的各種性能指標、錯誤日志、用戶行為等數據。它通常包括以下幾個核心模塊: 性能監控:頁面加載時間、資源加載時間…

Camera相機人臉識別系列專題分析之十二:人臉特征檢測FFD算法之libvega_face.so數據結構詳解

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: Camera相機人臉識別系列專題分析之十一:人臉特征檢測FFD算法之低功耗libvega_face.so人臉屬性(年齡,性別,膚…

如何配置HarmonyOS 5與React Native的開發環境?

配置 HarmonyOS 5 與 React Native 的開發環境需遵循以下步驟 一、基礎工具安裝 ?DevEco Studio 5.0? 從 HarmonyOS 開發者官網 下載安裝勾選組件: HarmonyOS SDK (API 12)ArkTS 編譯器JS/ArkTS 調試工具HarmonyOS 本地模擬器 ?Node.js 18.17 # 安裝后驗證版…

kotlin kmp 副作用函數 effect

在 Kotlin Multiplatform (KMP) Compose 中,“effect functions”(或“effect handlers”)是專門的可組合函數,用于在 UI 中管理副作用。 在 Compose 中,可組合函數應該是“純”的和聲明式的。這意味著它們應該理想地…

3.3.1_1 檢錯編碼(奇偶校驗碼)

從這節課開始,我們會探討數據鏈路層的差錯控制功能,差錯控制功能的主要目標是要發現并且解決一個幀內部的位錯誤,我們需要使用特殊的編碼技術去發現幀內部的位錯誤,當我們發現位錯誤之后,通常來說有兩種解決方案。第一…

【Pandas】pandas DataFrame isna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值(NaN)DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充(即“下一個有效觀測值”&#xff09…

MQTT協議:物聯網時代的通信基石

MQTT協議:物聯網時代的通信基石 在當今快速發展的物聯網(IoT)時代,設備之間的通信變得尤為重要。MQTT(Message Queuing Telemetry Transport)協議作為一種輕量級的消息傳輸協議,正逐漸成為物聯…

Excel 表格內批量添加前綴與后綴的實用方法

我們經常需要為 Excel 表格中的內容統一添加前綴或后綴,例如給編號加“NO.”、給姓名加“會員_”等。手動操作效率低,本文將介紹幾種實用的方法,幫助你快速完成批量添加前綴和后綴的操作。 使用“&”運算符添加前綴或后綴(推…