JVM運行流程

? 作者:小胡_不糊涂
🌱 作者主頁:小胡_不糊涂的個人主頁
📀 收錄專欄:JavaEE
💖 持續更文,關注博主少走彎路,謝謝大家支持 💖

JVM

  • 1. 運行流程
  • 2. 運行時數據區
    • 2.1 堆(線程共享)
    • 2.2 Java虛擬機棧(線程私有)
    • 2.3 本地方法棧(線程私有)
    • 2.4 程序計數器(線程私有)
    • 2.5 方法區(線程共享)
  • 3. 數據內存區域劃分

JVM 是 Java Virtual Machine 的簡稱,意為 Java虛擬機。
虛擬機是指通過軟件模擬的具有完整硬件功能的、運?在?個完全隔離的環境中的完整計算機系統。

1. 運行流程

程序在執?之前先要把java代碼轉換成字節碼(class?件),JVM ?先需要把字節碼通過?定的?式–
類加載器(ClassLoader)
,把?件加載到內存中運?時數據區(Runtime Data Area),?字節碼?件是 JVM 的?套指令集規范,并不能直接交個底層操作系統去執?,因此需要特定的命令解析器執?引擎(Execution Engine),將字節碼翻譯成底層系統指令再交由CPU去執?,?這個過程中需要調?其他語?的接?**本地庫接?(Native Interface)**來實現整個程序的功能,這就是這4個主要組成部分的職責與功能。

在這里插入圖片描述

JVM 主要通過分為以下 4 個部分,來執? Java 程序的,它們分別是:

  1. 類加載器(ClassLoader)
  2. 運?時數據區(Runtime Data Area)
  3. 執?引擎(Execution Engine)
  4. 本地庫接?(Native Interface)

2. 運行時數據區

JVM 運?時數據區域也叫內存布局,但需要注意的是它和 Java 內存模型((Java Memory Model,簡稱 JMM)完全不同,屬于完全不同的兩個概念,它由以下 5 ?部分組成:
在這里插入圖片描述

2.1 堆(線程共享)

**堆的作?:**程序中創建的所有對象都在保存在堆中。
堆??分為兩個區域:新?代和??代,新?代放新建的對象,當經過?定 GC 次數之后還存活的對象會放???代。新?代還有 3 個區域:?個 Endn + 兩個 Survivor(S0/S1)。
在這里插入圖片描述

垃圾回收的時候會將 Endn 中存活的對象放到?個未使?的 Survivor 中,并把當前的 Endn 和正在使?的 Survivor 清楚掉。

2.2 Java虛擬機棧(線程私有)

Java 虛擬機棧的作?: Java 虛擬機棧的?命周期和線程相同,Java 虛擬機棧描述的是 Java ?法執?的內存模型:每個?法在執?的同時都會創建?個棧幀(Stack Frame)?于存儲局部變量表、操作數棧、動態鏈接、?法出?等信息。
堆內存、棧內存中,棧內存指的就是虛擬機棧。

Java 虛擬機棧中包含了以下 4 部分:
在這里插入圖片描述

  1. 局部變量表: 存放了編譯器可知的各種基本數據類型(8?基本數據類型)、對象引?。局部變量表所需的內存空間在編譯期間完成分配,當進??個?法時,這個?法需要在幀中分配多?的局部變量空間是完全確定的,在執?期間不會改變局部變量表??。簡單來說就是存放?法參數和局部變量。
  2. 操作棧:每個?法會?成?個先進后出的操作棧。
  3. 動態鏈接:指向運?時常量池的?法引?。
  4. ?法返回地址:PC 寄存器的地址。

線程私有?
由于JVM的多線程是通過線程輪流切換并分配處理器執?時間的?式來實現,因此在任何?個確定的時刻,?個處理器(多核處理器則指的是?個內核)都只會執??條線程中的指令。因此為了切換線程后能恢復到正確的執?位置,每條線程都需要獨?的程序計數器,各條線程之間計數器互不影響,獨?存儲。我們就把類似這類區域稱之為"線程私有"的內存。

2.3 本地方法棧(線程私有)

本地?法棧和虛擬機棧類似,只不過 Java 虛擬機棧是給 JVM 使?的,?本地?法棧是給本地?法使?的。

2.4 程序計數器(線程私有)

程序計數器的作?: ?來記錄當前線程執?的?號的。
程序計數器是?塊?較?的內存空間,可以看做是當前線程所執?的字節碼的?號指?器。
如果當前線程正在執?的是?個Java?法,這個計數器記錄的是正在執?的虛擬機字節碼指令的地址;如果正在執?的是?個Native?法,這個計數器值為空。

程序計數器內存區域是唯??個在JVM規范中沒有規定任何OOM情況的區域!

2.5 方法區(線程共享)

方法區的作?: ?來存儲被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據的。

運?時常量池是?法區的?部分,存放字?量符號引?
字?量 : 字符串(JDK 8 移動到堆中) 、final常量、基本數據類型的值。
符號引? : 類和結構的完全限定名、字段的名稱和描述符、?法的名稱和描述符。

3. 數據內存區域劃分

  1. 堆:存放new出來的對象(成員變量)
  2. 棧:存放方法之間的調用關系(局部變量)
  3. 方法區/元數據區:存放類對象(類加載之后,存放的位置)(靜態變量)
  4. 程序計數器:存放每個線程,下一條要執行的指令的地址
    1、3是整個Java進程公用一份;2、4是每個線程都有自己的一份

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

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

相關文章

ubuntu新建ap熱點并分享

測試環境ubuntu16,只有一臺筆記本電腦,不插網線,無線網卡既連wifi,又作為熱點 1.方法1 直接手動新建ap熱點 參考https://jingyan.baidu.com/article/ea24bc39b03fc6da62b331f0.html https://jingyan.baidu.com/article/363872ecd8f35d6e4ba…

機試指南:Ch5:線性數據結構 Ch6:遞歸與分治

文章目錄 第5章 線性數據結構1.向量 vector2.隊列 queue(1)隊列的特點、應用(2)基本操作(3)例題例題1:約瑟夫問題2 (難度:中等) (4)習題習題1:排隊打飯 (難度:中等) 3.棧 stack(1)棧…

前端 JS 經典:Content-type 詳解

1. 什么是 Content-Type Content-Type 是 HTTP 協議中的一個請求頭或響應頭字段,用于指示發送或接收的實體的媒體類型,告訴服務器或客戶端如何解析和處理請求或響應的主體部分。 2. Content-Type 的構成 Content-Type 由兩部分組成:媒體類型…

視頻在線壓縮

video2edit 一款免費的在線視頻編輯軟件,可以進行視頻合并、視頻剪輯、視頻壓縮以及轉換視頻格式等。 鏈接地址:在線視頻編輯器和轉換器 - 編輯,轉換和壓縮視頻文件 打開視頻壓縮頁面,上傳想要壓縮視頻,支持MP4&…

收入穩步增長 助力持續發展 尼康發布截至2024年3月財年第三季度財報

近日,尼康截至2024年3月財年的第三季度(2023年10月1日-2023年12月31日)財報正式發布。數據顯示,尼康集團第三財季銷售收入共計1977億日元,較去年同期上漲300億日元,漲幅約17.9%。其中影像業務領域&#xff…

Java面試題:解釋Java內存模型中的內存順序規則,Java中的線程組(ThreadGroup)的工作原理,Java中的FutureTask的工作原理

引言 在Java開發領域,內存模型、多線程和并發是三個至關重要的概念,它們直接影響到程序的性能、穩定性和可擴展性。作為面試官,考察候選人對這些概念的理解和應用能力是評估其技術水平的重要手段。本文將提供三道涉及這些核心知識點的面試題…

視頻記錄儀_基于聯發科MT6762的智能4G記錄儀方案

智能記錄儀采用聯發科強勁八核處理器,12nm制程工藝的記錄儀具便是滿足這些需求的理想選擇。搭載4GB32GB內存,并運行Android 11.0操作系統,這款記錄儀具展現出強勁的性能表現。 首先,這款記錄儀具具備優秀的視頻錄制功能。它能完整…

WPS如何共享文件和文件夾

1 WPS共享單個文件 用WPS打開要分享的文件,點擊右上角的“分享”鍵,選擇上傳到云端。 之后點擊“創建并分享”,即可分享該文檔。 2 WPS創建共享文件夾 2.1 如何共享文件夾 首先打開WPS,點擊左上角的首頁。在首頁欄中&#…

Ubuntu系統下DPDK環境搭建

目錄 一.虛擬機配置1.添加一個網卡(橋接模式)2.修改網卡類型3.修改網卡名稱4.重啟虛擬機5.查看網卡信息6.dpdk配置內存巨型頁 三 DPDK源代碼下載和編譯1.下載源代碼2.解壓源代碼3.安裝編譯環境4.編譯5.設置dpdk的環境變量6.禁止多隊列網卡7.加載igb_uio模塊8.網卡綁定9.驗證測試…

Vue3自定義文章列表組件

一、Vue3的代碼展示 <template><div><div v-for"article in articles" :key"article.id" class"article-card"><div class"author-info"><img :src"article.avatar" alt"Author Avatar&qu…

Android 驗證啟動模式

文章目錄 Android 驗證啟動模式查看任務棧launchModestandardsingleTopsingleTasksingleInstance Intent標記FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TASK 和 FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP Android 驗證啟動模式 查看任務棧 可…

軟考52-上午題-【數據庫】-關系模式2

一、關系模式的回顧 見&#xff1a;軟考38-上午題-【數據庫】-關系模式 二、關系模式 2-1、關系模式的定義 示例&#xff1a; 念法&#xff1a;A——>B A決定B&#xff0c;或者&#xff0c;B依賴于A。 2-2、函數依賴 1、非平凡的函數依賴 如果X——>Y&#xff0c;&a…

Linux Shell腳本練習(三)

1、測試用戶名與密碼是否正確。 2、輸出1-1000內的素數。 3、對 100 以內的所有正整數相加求和(1234...100)。 4、輸出9*9 乘法表。 5、編寫腳本,顯示進度條。 、 6、輸入三個數并進行升序排序

RocketMQ - 深入研究一下生產者到底如何發送消息的

1. 創建Topic的時候為何要指定MessageQueue數量 首先如果要搞明白生產者的工作原理,那么就必須先明白一個概念,MessageQueue是什么? 而要明白MessageQueue是什么,就必須把他跟Topic以及Broker綜合起來看,才能搞明白。如果我們要使用RocketMQ,你先部署出來一套RocketMQ集…

C++高級面試題:解釋 C++ 中的智能指針循環引用問題,并介紹如何解決它

解釋 C 中的智能指針循環引用問題&#xff0c;并介紹如何解決它 智能指針循環引用問題指的是兩個或多個對象之間相互持有對方的智能指針&#xff0c;導致內存泄漏的情況。當使用智能指針時&#xff0c;如果對象之間存在循環引用關系&#xff0c;可能會造成內存泄漏&#xff0c…

附詳細答案,最新BAT大廠面試者整理的Android面試題目

前言 前幾年移動互聯網創業的風口&#xff0c;如今漸漸消失&#xff0c;移動互聯網被巨頭公司瓜分&#xff0c;一些創業公司倒閉了&#xff0c;Android 開發需求慢慢趨近于飽和。而當初移動互聯網處于風口時&#xff0c;自學、轉行以及培訓機構出來了大量 Android 開發從業者&…

CSS-浮動,定位

1. 浮動 (float) CSS的定位機制有三種&#xff1a;普通流(標準流)&#xff0c;浮動和定位。 普通流就是一個網頁內標簽元素正常從上到下&#xff0c;從左到右排列順序的意思&#xff0c;比如塊級元素會獨占一行&#xff0c;行內元素會按順序依次前后排列&#xff1b;按照這種大…

docker 安裝單機版 opengauss5.0.1

前言 因為官網的鏡像直接安裝不成功&#xff0c;所以才寫的這邊文章 1、下載openGauss 地址&#xff1a; https://opengauss.org/zh/download/ 下載名稱為&#xff1a;openGauss-5.0.1-CentOS-64bit.tar.bz2 1.1、 下載gosu-amd64 下載 gosu-amd64 2、制作鏡像(和官網保持一致)…

佛山50公里徒步組團|真北敏捷社區佛山敏捷DevOps社區

真北敏捷社區&佛山敏捷DevOps社區有兩個宗旨&#xff0c;一是求知&#xff0c;二是連接。連接有識之士&#xff0c;同修友士之識。峨峨乎高山&#xff0c;洋洋乎流水。談笑有鴻儒&#xff0c;往來無白丁。 《柳葉刀》上的研究顯示&#xff0c;運動的情緒價值&#xff0c;相…

探索NebulaGraph:一個開源分布式圖數據庫的技術解析

1. 介紹 NebulaGraph的定位和用途 NebulaGraph是一款開源的分布式圖數據庫&#xff0c;專注于存儲和處理大規模圖數據。它的主要定位是為了解決圖數據存儲和分析的問題&#xff0c;能夠處理節點和邊數量巨大、結構復雜的圖結構數據。NebulaGraph被設計用來應對各種領域的圖數…