八股---7.JVM

1. JVM組成

1.1 JVM由哪些部分組成?運行流程?

難易程度:☆☆☆        出現頻率:☆☆☆☆

  • Java Virtual Machine:Java 虛擬機,Java程序的運行環境(java二進制字節碼的運行環境)
  • 好處:一次編寫,到處運行;自動內存管理,垃圾回收機制
  • 程序運行之前,需要先通過編譯器將 Java 源代碼文件編譯成 Java 字節碼文件;

  • 程序運行時,JVM 會對字節碼文件進行逐行解釋,翻譯成機器碼指令,并交給對應的操作系統去執行。

  • 好處:一次編寫,到處運行;自動內存管理,垃圾回收機制

  • JVM  <---> 操作系統(windows、linux)<---> 計算機硬件(cpu、內存條)
    java跨平臺是因JVM屏蔽了操作系統的差異,真正運行代碼的不是操作系統

JVM 主要由四個部分組成: 運行流程:
Java 編譯器(javac)將 Java 代碼轉換為字節碼(.class 文件)

1. 類加載器(ClassLoader)

  • 負責加載 .class 文件,將 Java 字節碼加載到內存中,并交給 JVM 執行

2. 運行時數據區(Runtime Data Area)

  • 管理JVM使用的內存主要包括:

  • 方法區(Method Area):存儲類的元數據、常量、靜態變量等。

  • 堆(Heap):存儲所有對象和數組,垃圾回收器主要回收堆中的對象。

  • 棧(Stack):每個線程都有一個棧,用于存儲局部變量、方法調用等信息。

  • 程序計數器(PC Register):每個線程有一個程序計數器,指示當前線程正在執行的字節碼指令地址。

  • 本地方法棧(Native Method Stack):支持本地方法的調用(通過 JNI)。
    其中方法區是線程共享的,虛擬機棧本地方法棧程序計數器是線程私有的。

3. 執行引擎(Execution Engine)

  • 負責執行字節碼,包含:
  • 解釋器:逐條解釋執行字節碼。

  • JIT 編譯器:將熱點代碼編譯為機器碼,提高執行效率。

  • 垃圾回收器:回收堆中的不再使用的對象,釋放內存。

4. 本地庫接口(Native Method Library)

  • 允許 Java 程序通過 java本地接口JNI(Java Native Interface)調用本地方法(如 C/C++ 編寫的代碼),與底層系統或硬件交互。

1.2 什么是程序計數器?

難易程度:☆☆☆        出現頻率:☆☆☆☆

  • 程序計數器:線程私有的,每個線程一份,內部保存字節碼的行號。用于記錄正在執行的字節碼指令的地址
  • 每個線程都有自己的程序計數器,確保線程切換時能夠繼續執行未完成的任務。

1.3 你能給我詳細的介紹Java堆嗎?

難易程度:☆☆☆        出現頻率:☆☆☆☆

  • Java堆是 JVM 中用于存儲所有對象和數組的內存區域。線程共享的區域堆中沒有內存空間可分配給實例,也無法再擴展時,則拋出OutOfMemoryError異常。

它被分為:

  • 年輕代(存儲新創建的對象),被劃分為三部分:
    Eden區大多數新對象的分配區域;
    S0 和 S1(兩個大小嚴格相同的Survivor區):Eden 空間經過 GC 后存活下來的對象會被移到其中一個 Survivor 區域;
  • 老年代:在經過幾次垃圾收集后,任然存活于Survivor的對象將被移動到老年代區間。
  • 永久代:JDK 7 及之前,JVM 的方法區(也稱永久代),保存的類信息、靜態變量、常量、編譯后的代碼
    元空間:JDK 8 及之后,永久代被 Metaspace(元空間)取代,移除了永久代,把數據存儲到了本地內存的元空間中,且其大小不再受 JVM 堆的限制,防止內存溢出。

1.4 什么是虛擬機棧

難易程度:☆☆☆        出現頻率:☆☆☆☆

Java Virtual machine Stacks (java 虛擬機棧)

  • 每個線程在 JVM 中私有的一塊內存區域,稱為虛擬機棧,先進后出,用于存儲方法的局部變量和方法調用信息;

  • 每個棧由多個棧幀(frame)組成,當線程執行方法時,為該方法分配一個棧幀(Stack Frame);

  • 每個線程只能有一個活動棧幀,對應著當前正在執行的那個方法;

垃圾回收是否涉及棧內存?

  • 垃圾回收主要指就是堆內存
  • 棧內存中不會有垃圾回收的概念,因為棧內存是由 JVM 自動管理的,方法執行完成時,棧幀彈棧,內存就會釋放

棧內存分配越大越好嗎?

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

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

相關文章

企業級AI-DevOps工具鏈的構成及實現方案

企業級AI-DevOps工具鏈的構成及實現方案 DevOps在AI大模型研發中的重要性及應用背景一、場景驅動的AI產品研發運營機制二、AI-DevOps生產線建設三、基于DevOps的AI大模型研發機制四、基于DevOps的智能體場景研發機制五、場景驅動的應用評估分析機制 DevOps在AI大模型研發中的重…

在 Spring Boot 項目里,MYSQL中json類型字段使用

前言&#xff1a; 因為程序特殊需求導致&#xff0c;需要mysql數據庫存儲json類型數據&#xff0c;因此記錄一下使用流程 1.java實體中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…

Python競賽環境搭建全攻略

Python環境搭建競賽技術文章大綱 競賽背景與意義 競賽的目的與價值Python在競賽中的應用場景環境搭建對競賽效率的影響 競賽環境需求分析 常見競賽類型&#xff08;算法、數據分析、機器學習等&#xff09;不同競賽對Python版本及庫的要求硬件與操作系統的兼容性問題 Pyth…

在 Win10 上 WSL 安裝 Debian 12 后,Linux 如何啟動 SMTP 服務?

在 WSL 的 Debian 12 中啟動 SMTP 服務&#xff08;以 Postfix 為例&#xff09;&#xff0c;請按以下步驟操作&#xff1a; 1. 安裝 Postfix sudo apt update sudo apt install postfix mailutils安裝過程中會彈出配置窗口&#xff1a; General type of mail configuration&a…

樹莓派超全系列教程文檔--(59)樹莓派攝像頭rpicam-apps

這里寫目錄標題 rpicam-apps libcamera 文章來源&#xff1a; http://raspberry.dns8844.cn/documentation 原文網址 rpicam-apps 樹莓派操作系統 Bookworm 將相機捕捉應用程序從 libcamera-\* 重命名為 rpicam-*。符號鏈接允許用戶暫時使用舊名稱。盡快采用新的應用程序名稱…

【數據結構】圖論最短路徑算法深度解析:從BFS基礎到全算法綜述?

最短路徑 導讀一、最短路徑1.1 單源最短路徑1.2 各頂點間的最短路徑1.3 最短路徑算法 二、BFS算法結語內容回顧下一篇預告&#xff1a;挑戰帶權最短路徑&#xff01; 導讀 大家好&#xff0c;很高興又和大家見面啦&#xff01;&#xff01;&#xff01; 歡迎繼續探索圖算法的…

中國政務數據安全建設細化及市場需求分析

(基于新《政務數據共享條例》及相關法規) 一、引言 近年來,中國政府高度重視數字政府建設和數據要素市場化配置改革。《政務數據共享條例》(以下簡稱“《共享條例》”)的發布,與《中華人民共和國數據安全法》(以下簡稱“《數據安全法》”)、《中華人民共和國個人信息…

Linux信號保存與處理機制詳解

Linux信號的保存與處理涉及多個關鍵機制&#xff0c;以下是詳細的總結&#xff1a; 1. 信號的保存 進程描述符&#xff08;task_struct&#xff09;&#xff1a;每個進程的PCB中包含信號相關信息。 pending信號集&#xff1a;記錄已到達但未處理的信號&#xff08;未決信號&a…

【Redis】筆記|第10節|京東HotKey實現多級緩存架構

緩存架構 京東HotKey架構 代碼結構 代碼詳情 功能點&#xff1a;&#xff08;如代碼有錯誤&#xff0c;歡迎討論糾正&#xff09; 多級緩存&#xff0c;先查HotKey緩存&#xff0c;再查Redis&#xff0c;最后才查數據庫熱點數據重建邏輯使用分布式鎖&#xff0c;二次查詢更新…

php apache構建 Web 服務器

虛擬機配置流程winsever2016配置Apache、Mysql、php_windows server 2016配置web服務器-CSDN博客 PHP 和 Apache 通過 ??模塊化協作?? 共同構建 Web 服務器&#xff0c;以下是它們的交互機制和工作流程&#xff1a; ??一、核心組件分工?? 組件角色??Apache??Web …

二分查找排序講解

一、二分查找&#xff08;Binary Search&#xff09; 核心思想&#xff1a; 前提&#xff1a;數組必須是 有序的&#xff08;比如從小到大排列&#xff09;。目標&#xff1a;在數組中快速找到某個數&#xff08;比如找 7&#xff09;。方法&#xff1a;每次排除一半的數&…

【Redis實戰:緩存與消息隊列的應用】

在現代互聯網開發中&#xff0c;Redis 作為一款高性能的內存數據庫&#xff0c;廣泛應用于緩存和消息隊列等場景。本文將深入探討 Redis 在這兩個領域的應用&#xff0c;并通過代碼示例比較兩個流行的框架&#xff08;Redis 和 RabbitMQ&#xff09;的特點與適用場景&#xff0…

[拓撲優化] 1.概述

常見的拓撲優化方法有&#xff1a;均勻化法、變密度法、漸進結構優化法、水平集法、移動可變形組件法等。 常見的數值計算方法有&#xff1a;有限元法、有限差分法、邊界元法、離散元法、無網格法、擴展有限元法、等幾何分析等。 將上述數值計算方法與拓撲優化方法結合&#…

【openssl】升級為3.3.1,避免安全漏洞

本文檔旨在形成 對Linux系統openssl版本進行升級 的搭建標準操作過程&#xff0c;搭建完成后&#xff0c;實現 openssl 達到3.3以上版本&#xff0c;避免安全漏洞 效果。 一、查看當前版本 版本不高于3.1的&#xff0c;均需要升級。 # 服務器上運行以下命令&#xff0c;查看…

基于正點原子阿波羅F429開發板的LWIP應用(6)——SNTP功能和lwiperf測速

說在開頭 正點原子F429開發板主芯片采用的是STM32F429IGT6&#xff0c;網絡PHY芯片采用的是LAN8720A(V1)和YT8512C(V2)&#xff0c;采用的是RMII連接&#xff0c;PHY_ADDR為0&#xff1b;在代碼中將會對不同的芯片做出適配。 CubeMX版本&#xff1a;6.6.1&#xff1b; F4芯片組…

C:\Users\中文名修改為英文名

C:\Users\中文名修改為英文名 背景操作步驟 背景 買了臺新電腦&#xff0c;初始化好不知道啥操作把自己的登錄用戶名改成了中文&#xff0c;有些安裝的軟件看見有中文直接就水土不服了。 操作步驟 以下稱中文用戶名為張三。 正常登錄張三用戶 進入用戶管理頁面修改用戶名&a…

YOLOv12環境配置,手把手教你使用YOLOv12訓練自己的數據集和推理(附YOLOv12網絡結構圖),全文最詳細教程

文章目錄 前言一、YOLOv12代碼下載地址1.YOLOv12模型結構圖 二、YOLO環境配置教程1.創建虛擬環境2.激活虛擬環境3.查詢自己電腦可支持最高cuda版本是多少&#xff08;無顯卡的同學可以跳過這個步驟&#xff09;4.pytorch安裝5.驗證 PyTorch GPU 是否可用&#xff08;沒有顯卡的…

ES6(ES2015)特性全解析

ES6&#xff08;ECMAScript 2015&#xff09;是 JavaScript 語言發展史上的一個重要里程碑&#xff0c;它引入了許多新的語法特性和功能&#xff0c;提升了代碼的可讀性、可維護性和開發效率。 1. 塊級作用域變量&#xff1a;let 和 const ES6 引入了 let 和 const 關鍵字&am…

jvm 垃圾收集算法 詳解

垃圾收集算法 分代收集理論 垃圾收集器的理論基礎&#xff0c;它建立在兩個分代假說之上&#xff1a; 弱分代假說&#xff1a;絕大多數對象都是朝生夕滅的。強分代假說&#xff1a;熬過越多次垃圾收集過程的對象就越難以消亡。 這兩個分代假說共同奠定了多款常用的垃圾收集…

數字孿生+AR/VR的融合創新

目錄 引言&#xff1a;工業元宇宙的興起與技術基石數字孿生&#xff1a;工業元宇宙的數字底座 2.1 數字孿生的概念與關鍵要素 2.2 數字孿生在工業領域的應用 2.3 數字孿生的技術架構 (Mermaid Graph) AR/VR&#xff1a;工業元宇宙的沉浸式體驗層 3.1 AR/VR 的概念與技術原理…