JVM的面試相關問題

面試中的相關問題主要是三塊

1.JVM 內存區域劃分

2.JVM 的類加載機制

3.JVM 的垃圾回收機制

JVM? Java虛擬機

VM Virtual Machine 虛擬機,用 軟件 來 模擬 硬件

傳統意義上的"虛擬機" 更多指的是 VMWare, Virtual Box, Hyper-V, KVM(構造出虛擬的電腦,甚至可以在虛擬機的電腦上安裝獨立的操作系統)

一臺計算機:

*CPU

*儲存器

*輸入設備

*輸出設備

通過硬件來模擬軟件

Java 的虛擬機,并不是虛擬電腦的所有核心硬件(一部分),也不能運行獨立的操作系統,只是可以運行Java代碼

JVM 更準確額說是 Java語言的"運行時環境",核心功能就是把 Java 代碼,翻譯成計算機可以識別的機器指令(低效的,更高效的,像C/C++/Go,編譯出來的程序就是標準的 CPU 構成的指令程序)

帶來的好處是,可更好的做到"跨平臺"和硬件無關

Java 程序是怎么運行的?

1.編寫代碼,是編寫了.Java文本文件

2.通過 Javac 這樣的 命令行工具,把.java 編譯成.class文件(字節碼文件)二進制的,.java 中的每個 class 都會對應一個.class 文件,一個.java文件中可以出現多個 class(只能有一個 public)

3.通過 java 這樣的命令行工具,運行對應的.class文件 java 命令行工具,對應到一個 java 進程,這個 java 進程就可以理解成一個 Java 虛擬機了(也可以叫 JVM 的進程),JVM 的進程,就會對,class 文件中的內容解釋執行了

Java 代碼中的"拋出異常"實在 3 這個階段產生的

1.JVM 內存區域劃分

java 程序跑起來,得到 java 進程,需要從操作系統申請一大塊空間

java 進程就需要把這一大塊空間,分成多個區域,分別賦予不同的功能

簡化的模型

1)程序計數器

非常小的空間,只需要保存一個"地址",描述當前 java 程序需要運行的下一個字節碼指令的位置

一個 java 進程中應該有幾個程序計數器呢?

應該是存在多個的

線程是 cpu 調度執行的基本單位.

每個線程都得有一個程序計數器來記錄

操作系統中也是有類似的設定的,會在 CPU 上專門準備一個寄存器,就會用這個寄存器,表示"下一條指令執行的地址",這個寄存器稱為 EIP(計組里就會把這個概念稱為"程序計數器"簡稱為 PC(Program Counter))

CPU 執行指令,只是"默認是循序執行的",比如遇到 if, while, for,方法調用,拋出異常....都會使指令不在按照循序執行,跳轉到某個位置

線程是"并發執行",產生一個調度,一個線程,執行一段時間之后,需要調度走,后續在調度回來

保存上下文,這個線程執行過程的所有相關寄存器的值(包括了 PC)

程序計數器的值,java代碼干預不了,程序計數器值,代表的要執行的指令的地址,也是在元數據區

2)元數據區(在 Java 8 之前 稱為 方法區,放的是 類 對應 的指令)

元數據區的內容,Java 代碼也干預不了,你的代碼中寫了多少類,元數據區的內容也就確定了

Java 代碼中,會創建類,基于 類 創建對象,對象當然是要有內存空間來保存的,類同樣也需要再內存空間中保存

java 中提出了"類對象"概念

JVM 中,通過特殊的對象,表示一個類的基本信息

*類的名字是啥

*類繼承的父類是啥

*實現的接口是啥

*有啥屬性(屬性的名字,類型,public/private)

*有啥方法(方法的名字,參數列表,返回值,public/private)

*類靜態成員

*常量

3)棧(這里的棧和數據結構中的棧是不同的概念)

數據結構的棧 -> 錢

JVM 的棧 -> 人民幣

這個區域保存了方法調用關系

java 的方法保證了,當前方法執行完畢返回上一層,調用位置繼續執行

這個棧也是后進先出的特點,這里的元素,有固定的說法,把 JVM 的棧中的每一個元素,稱為"棧幀(frame)"

棧幀表示一次"方法調用"

1)方法的產生是哪些

2)方法中的局部變量有哪些

3)方法執行結束之后,返回值的結果

4)方法執行結束之后,跳轉回的地址

4)堆

堆存放了 new 出來的對象,對象對應的內存空間在堆中,常量之前是放到元數據區的,后來放到了堆中

class Test {private int n;private static int m;public void test1() {//...}static public void test2() {//...}
}
main(){Test t = new Test();

常見誤區:

內置類型在棧上

引用類型在堆上

關鍵是變量的形態

局部變量 => 棧

成員變量 => 堆

靜態成員變量 => 元數據區

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

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

相關文章

win10使用nginx做簡單負載均衡測試

一、首先安裝Nginx: 官網鏈接:https://nginx.org/en/download.html 下載完成后,在本地文件中解壓。 解壓完成之后,打開conf --> nginx.config 文件 1、在 http 里面加入以下代碼 upstream GY{#Nginx是如何實現負載均衡的&a…

[特殊字符]車牌識別相機,到底用在哪?

停車場管理,快速通行不是夢 停車場大概是車牌識別相機最常見的 “工作崗位” 啦!以前進出停車場,取卡、刷卡、人工收費,一系列操作下來,高峰期的時候真的能把人等得不耐煩😫 現在有了車牌識別相機&#xff…

nosqlbooster pojie NoSQLBooster for MongoDB

測過可用,注意 asar的安裝使用報錯改用 npx asar extract app.asar app 路徑 C:\Users{computerName}\AppData\Local\Programs\nosqlbooster4mongo\resources npm install asar -g asar extract app.asar app 打開shared\lmCore.js 修改MAX_TRIAL_DAYS3000 修改…

組態王通過開疆智能profinet轉ModbusTCP網關連接西門子PLC配置案例

本案例是組態王通過使用開疆智能研發的Profinet轉ModbusTCP網關采集西門子1200PLC中數據的案例。 網關配置 首先來配置網關的參數,打開網關配置軟件“Gateway Configuration Studio” 由于組態王那側設定為ModbusTCP客戶端所以網關作為ModbusTCP服務器。新建項目…

大模型服務如何實現高并發與低延遲

寫在前面 大型語言模型(LLM)正以前所未有的速度滲透到各行各業,從智能客服、內容創作到代碼生成、企業知識庫,其應用場景日益豐富。然而,將這些強大的 AI 能力轉化為穩定、高效、可大規模應用的服務,卻面臨著巨大的挑戰,其中高并發處理能力和低響應延遲是衡量服務質量的…

k8s監控方案實踐補充(二):使用kube-state-metrics獲取資源狀態指標

k8s監控方案實踐補充(二):使用kube-state-metrics獲取資源狀態指標 文章目錄 k8s監控方案實踐補充(二):使用kube-state-metrics獲取資源狀態指標一、Metrics Server簡介二、kube-state-metrics實戰部署1. 創…

Manus 全面開放注冊,OpenAI 發布 Codex,ChatGPT 上線 GPT-4.1!| AI Weekly 5.12-18

📢本周 AI 快訊 | 1 分鐘速覽🚀 1?? 📝 Manus 全面開放注冊 :無需邀請碼即可注冊,新用戶免費獲得 1000 積分,每日 300 積分免費任務。 2?? 🔍 阿里 Qwen 推出「深入研究」 :Qw…

代理(主要是動態)和SpringAOP

代理 靜態代理基于繼承實現動態代理是基于接口實現 業務層每次實現轉賬都需要執行,可以把他們拿出來當成一個切面,自己寫出一個代理類,讓業務層只執行業務的邏輯,重復的代碼代理類來完成,然后調用代理類來執行。 代理類…

uniapp打包H5,輸入網址空白情況

由于客戶預算有限,最近寫了兩個uniapp打包成H5的案例,總結下面注意事項 1. 發行–網站-PCWeb或手機H5按鈕,輸入名稱,網址 點擊【發行】,生成文件 把這個給后端,就可以了 為什么空白呢 最重要一點&#xf…

uniapp-商城-63-后臺 商品列表(分類展示商品的刪除)

商品列表中的數據需要進行狀態管理,如上架、下架、刪除和修改等操作。對于存在錯誤或后期需要重新上傳的商品,可以通過刪除操作進行處理。 具體到商品刪除功能的實現,其基本流程如下:用戶在前端頁面點擊刪除按鈕后,系統…

學習設計模式《十》——代理模式

一、基礎概念 代理模式的本質【控制對象訪問】; 代理模式的定義:為其他對象提供一種代理以控制對這個對象的訪問; 代理模式的功能:代理模式是通過創建一個代理對象,用這個代理對象去代表真實的對象;客戶端得…

阿里云web端直播(前端部分)

阿里云&#xff1a;Web播放器快速接入_視頻點播(VOD)-阿里云幫助中心 import Aliplayer from aliyun-aliplayerimport aliyun-aliplayer/build/skins/default/aliplayer-min.css<div id"J_prismPlayer" style"width: 300px; height: 300px;" />var …

深入解析OrientDB:多模型數據庫的技術優勢與實際應用

OrientDB 是一款開源的多模型 NoSQL 數據庫&#xff0c;融合了文檔數據庫、圖數據庫和對象數據庫的特性。它不僅支持靈活的數據建模&#xff0c;還提供了高性能的查詢能力&#xff0c;適用于社交網絡、物聯網、內容管理等場景。本文詳細探討 OrientDB 的核心特性、應用場景&…

STM32控制電機

初始化時鐘&#xff1a;在 STM32 的程序中&#xff0c;初始化系統時鐘&#xff0c;一般會使用 RCC&#xff08;Reset and Clock Control&#xff09;相關函數來配置時鐘。例如&#xff0c;對于 STM32F103 系列&#xff0c;可能會使用 RCC_APB2PeriphClockCmd 函數來使能 GPIO 和…

(05)數字化轉型之生產制造:從通常的離散制造到柔性化生產的全景指南

當今制造業正經歷著前所未有的數字化變革&#xff0c;從傳統的離散制造到流程制造&#xff0c;再到新興的項目制造和柔性制造&#xff0c;各種生產模式都在加速向智能化方向演進。本文將系統性地介紹制造業生產管理的完整體系&#xff0c;為企業數字化轉型提供全面的方法論和實…

龍虎榜——20250520

上證指數今天縮量向上&#xff0c;個股漲多跌少&#xff0c;大盤股和小盤股總體表現都還可以。 深證同樣縮量上漲&#xff0c;向上補缺口的概率增大。 2025年5月20日龍虎榜行業方向分析 寵物經濟&#xff08;消費升級政策催化&#xff09; ? 代表標的&#xff1a;天元寵物、…

CVE-2022-22978源碼分析與漏洞復現

漏洞概述 CVE-2022-22978 是 Spring Security 框架中的一個高危認證繞過漏洞&#xff0c;影響版本包括 Spring Security 5.5.x < 5.5.7、5.6.x < 5.6.4 及更早的不受支持版本。攻擊者可通過構造包含換行符&#xff08;如 %0a&#xff09;的 URL 路徑&#xff0c;繞過正則…

PostGIS實現柵格數據入庫【raster2pgsql】

raster2pgsql使用與最佳實踐 一、工具概述 raster2pgsql是PostGIS提供的命令行工具,用于將GDAL支持的柵格格式(如GeoTIFF、JPEG、PNG等)導入PostgreSQL數據庫,支持批量加載、分塊切片、創建空間索引及金字塔概覽,是柵格數據入庫的核心工具。 二、核心功能與典型用法 1…

Redis企業級開發實戰:核心應用場景與最佳實踐

引言 Redis&#xff08;Remote Dictionary Server&#xff09;作為一款高性能的內存數據庫&#xff0c;在企業級開發中扮演著至關重要的角色。無論是緩存加速、分布式鎖、實時統計&#xff0c;還是消息隊列&#xff0c;Redis都能以極低的延遲和極高的吞吐量滿足業務需求。本文…

深入解析Spring Boot與Spring Cloud在微服務架構中的實踐

深入解析Spring Boot與Spring Cloud在微服務架構中的實踐 引言 隨著云計算和分布式系統的快速發展&#xff0c;微服務架構已成為現代軟件開發的主流模式。Spring Boot和Spring Cloud作為Java生態中微服務開發的核心框架&#xff0c;為開發者提供了強大的工具和組件&#xff0…