JVM 第一部分 JVM兩種解釋器 類加載過程和類加載器

JVM是跨平臺跨語言的虛擬機,不直接接觸硬件,位于操作系統的上一層

跟字節碼文件直接關聯,和語言沒有關系

一次編譯成字節碼文件,多次執行

請添加圖片描述

虛擬機可以分成三部分:類加載器,運行時數據區,執行引擎(解釋器+JIT編譯器)

JIT編譯器是把一些常用代碼編譯成 機器指令,并緩存起來,加快執行速度【解釋器相當于步行,響應快但是速度慢。JIT要先編譯成機器指令,相當于公交車,要等一段時間,但是速度塊。只用解釋器很慢,只用JIT要等比較久】

請添加圖片描述

零地址指令是因為棧里面每次只會有一個元素在棧頂,一次只處理一個

棧式架構指令集小,但是完成一個操作用的指令數量多

反編譯:運行寫的程序之后,會輸出編譯后的文件夾,cmd,cd進到某class文件的文件夾,javap -v class文件名 > xxx.txt 【就可以把字節碼文件的信息放到txt文件看】

一個Java程序對應一個java虛擬機(應該是)(服務器部署多個服務,應該有多個虛擬機)所以不同程序的堆棧不共享

第一部分:類加載器

請添加圖片描述

  • 加載:獲取類的全類名,讀取class文件,在方法區創建對應的Class對象
  • 鏈接
    • 驗證:驗證字節碼文件是否合法之類
    • 準備**:把類變量(加了static的變量)創建處理,賦零值**
      • 【加了final的常量在編譯時就已經分配內存,在準備階段顯式初始化】
      • 【不會為實例變量分配初始化,實例變量,就是成員變量,是在對象創建時,分配到堆時,默認賦零值】
    • 解析:把常量池內的符號引用換成直接引用【事實上,解析操作往往在JVM初始化之后執行】
  • 初始化:執行類構造器方法的過程。就是如果有類變量或者靜態方法塊,虛擬機會自動把他們整合在一起,按順序創建變量和賦值,由字節碼中的方法執行,這個方法稱為類構造器方法
    • 子類如果有類變量或者靜態方法塊,會先執行父類的方法,然后執行子類的
    • 多線程下,會給方法加鎖
    • 是類構造器,每個類的字節碼文件都有

請添加圖片描述

  • 通過 某個類.class.getClassLoader() 可以得到它的類加載器
  • 獲取的類加載器對象.getParent() 可以獲得它包含的類加載器
  • 引導類加載器
    • 用C/C++寫,不能獲取到
    • 加載Java的核心類庫(String類就是用它加載)
  • 擴展類加載器
    • 用Java寫
    • 加載ext文件夾下的類庫
  • 系統類加載器
    • 用Java寫
    • 默認的類加載器,加載環境變量或系統屬性

請添加圖片描述

  • 好處:
    • 避免用戶創建自己的類替換Java的一些核心類,比如String
      • 【如果包名和核心api包名一樣,即使是新的類,也不允許創建】
      • 【實踐中,如果新建一個String類,這個類的包也是 java.long 里面有個main方法。但是啟動不了會報錯】
      • 因為它經過雙親委派機制,到達引導類加載器,但是引導類加載器加載的是api里面的String,加載不了這個類,所以就啟動不了main方法
    • 避免類的重復加載:向上委托,一旦父加載器加載了,子加載器就不會重復加載
    • 不同的類加載器加載的類 就算包名一樣且同名也是不同的類(也是說要是從同一個class文件加載,不同類加載器,類也不同)

請添加圖片描述

常用調優工具

  • JDK命令行
  • Eclipse: Memory Analyzer Tool
  • Jconsole
  • VisualVM
  • Jprofiler
  • Java Flight Recorder
  • GCViewer
  • GC Easy

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

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

相關文章

TDengine 在 DISTRIBUTECH 分享輸配電數據管理實踐

2 月 27-29 日,2024 美國國際輸配電電網及公共事業展(DISTRIBUTECH International 2024)在美國-佛羅里達州-奧蘭多國家會展中心舉辦。作為全球領先的年度輸配電行業盛會,也是美洲地區首屈一指的專業展覽會,該展會的舉辦…

C++從零開始的打怪升級之路(day41)

這是關于一個普通雙非本科大一學生的C的學習記錄貼 在此前,我學了一點點C語言還有簡單的數據結構,如果有小伙伴想和我一起學習的,可以私信我交流分享學習資料 那么開啟正題 今天分享的是關于繼承的知識點 1.派生類的默認成員函數 首先我…

【和鯨冬令營】通過數據打造爆款社交APP用戶行為分析報告

【🐋和鯨冬令營】通過數據打造爆款社交APP用戶行為分析報告 文章目錄 【🐋和鯨冬令營】通過數據打造爆款社交APP用戶行為分析報告1 業務背景2 數據說明3 數據探索性分析4 用戶行為分析4.1 用戶屬性與行為關系分析4.2 轉化行為在不同用戶屬性群體中的分布…

值類型和引用類型詳解(C#)

可能你對值類型和引用類型還不太了解。 值類型和引用類型,是c#比較基礎,也必須掌握的知識點,但是也不是那么輕易就能掌握,今天跟著我一起來看看吧。 典型類型 首先我們看看這兩種不同的類型有哪些比較典型的代表。 典型值類型…

【云安全】網絡安全領域安全協議

IPSEC協議 IPSec(Internet Protocol Security)是一種網絡層安全協議,用于在IP通訊過程中確保完整性、認證性和機密性。它通過在標準的IP協議上加入安全機制來實現加密和認證。IPSec主要由兩個協議組成:認證頭(AH&…

在Windows 10系統中啟用快速啟動功能

在Windows 10系統中啟用快速啟動功能,可以按照以下步驟進行: 方法一(通過設置應用): 點擊任務欄左下角的“開始”按鈕或者按鍵盤上的Win鍵打開“開始”菜單。在“開始”菜單中選擇“設置”圖標(齒輪形狀&…

3.3日學習打卡----初學Redis(一)

3.3日學習打卡 目錄: 3.3日學習打卡NoSQL為什么要用NoSQL什么是NoSQL?NoSQL的四大分類關系型數據庫和非關系型數據及其區別NoSQL經典應用 RedisRedis是什么?Linux下安裝RedisDocker下安裝Redis基本知識 NoSQL 為什么要用NoSQL 單機Mysql的美好年代 在90年代&…

Sqlmap進行http頭注入及流量分析

環境準備:構建完善的安全滲透測試環境:推薦工具、資源和下載鏈接_滲透測試靶機下載-CSDN博客 利用 SQLMap 進行 HTTP 頭注入的方式對于 Less-19 注入點的注入 SQLMap 工具我使用kali中自帶的 注入準備 先使用bp將Less-19靶場的包抓下來保存到 txt 文件中,輸入賬號 admin…

Ubuntu23.10禁用Wayland

禁用前 編輯custom.conf文件 sudo vim /etc/gdm3/custom.conf 去掉WaylandEnablefalse前的#號 保存退出 重啟系統 生效: 成功轉換為X11

【LeetCode題解】2809. 使數組和小于等于 x 的最少時間+2788. 按分隔符拆分字符串+410. 分割數組的最大值

文章目錄 [2809. 使數組和小于等于 x 的最少時間](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路: [2788. 按分隔符拆分字符串](https://leetcode.cn/problems/split-strings-by-separator/)思路: [410. 分割數組的最大…

Leetcoder Day36| 動態規劃part03

343. 整數拆分 給定一個正整數 n,將其拆分為至少兩個正整數的和,并使這些整數的乘積最大化。 返回你可以獲得的最大乘積。 示例 1: 輸入: 2輸出: 1解釋: 2 1 1, 1 1 1。 示例 2: 輸入: 10輸出: 36解釋: 10 3 3 4, 3 3 4 36。說明: 你可以假設 …

如何提取圖片中某個位置顏色的RGB值,RGB十進制值與十六進制的轉換

打開本地的畫圖工具,把圖片復制或截圖粘進去,用顏色提取器點對應的位置就可以提取了。 獲取到的 RGB 值為 (66,133,244) 轉化后的值為 #4285F4。 【內容拓展一】:RGB 十進制值與十六進制的轉換 當我們從 RGB 十進制值轉換為十六進制值時&a…

Yapi部署

【GO開發工程師】Yapi部署 推薦個人主頁:席萬里的個人空間 文章目錄 【GO開發工程師】Yapi部署1、Yapi部署 1、Yapi部署 初始化yapi: git clone https://github.com/Ryan-Miao/docker-yapi.git cd docker-yapi docker-compose upyapi啟動失敗 1.cd進入…

粉絲福利-純凈Windows系統安裝鏡像下載網站

?Windows操作系統鏡像文件是從微軟或其他經過驗證的來源下載正版操作系統安裝介質的關鍵所在。以下是詳細闡述從不同渠道獲取Windows系統鏡像的說明,尤其強調官方和安全的下載途徑。Windows系統鏡像可以從多個可靠來源下載,以下是幾個推薦的選擇: 微軟官方網站 微軟官方網…

對于《幻獸帕魯》這樣的游戲,如何優化服務器性能以提高游戲體驗?

對于《幻獸帕魯》這樣的游戲,如何評估和優化服務器性能以提高游戲體驗? 硬件配置優化:選擇高性能的服務器,如4核16G的幻獸帕魯服務器,這樣可以保證有足夠的計算性能和內存容量來支持游戲的運行。同時,考慮到…

Node.js(六)-數據庫與身份認證

一 、學習目標 ◆ 能夠知道如何配置MySQL數據庫環境 ◆ 能夠認識并使用常見的 SQL語操作數據庫 ◆ 能夠在Express中操作MySQL數據庫 ◆ 能夠了解 Session的實現原理 ◆ 能夠了解JWT的實現原理 二、數據庫的基本概念 1.1 什么是數據庫 數據庫(database)…

邊緣計算網關的重要作用-天拓四方

隨著物聯網技術的迅猛發展,數據量的爆炸式增長對數據處理和分析提出了更高的要求。邊緣計算網關作為連接物理世界和數字世界的橋梁,正逐漸受到各行業的重視。本文將從行業背景、功能特點以及帶來的效益等方面,探討邊緣計算網關在當前及未來的…

備戰藍橋杯---狀態壓縮DP基礎2之TSP問題

先來一個題銜接一下: 與上一題的思路差不多,不過這里有幾點需要注意: 1.因為某一列的狀態還與上上一行有關,因此我們令f[i][j][k]表示第i行狀態為j,第i-1行狀態為k的最大炮兵數。 因此,我們可以得到狀態轉移方程&…

2024/03/01

控制機械臂 #include<myhead.h> #define SER_IP "192.168.126.2" #define SER_PORT 8888#define CLI_IP "192.168.252.165" #define CLI_PORT 9999int main(int argc, const char *argv[]) {int cfdsocket(AF_INET,SOCK_STREAM,0);if(cfd-1){perror…

成功解決git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解決git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 問題描述解決方案 問題描述 用git的時候可能會遇到這個問題&#xff1a; (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…