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.mzph.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…