当前位置: 首页 > news >正文

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();

常见误区:

内置类型在栈上

引用类型在堆上

关键是变量的形态

局部变量 => 栈

成员变量 => 堆

静态成员变量 => 元数据区

相关文章:

JVM的面试相关问题

面试中的相关问题主要是三块 1.JVM 内存区域划分 2.JVM 的类加载机制 3.JVM 的垃圾回收机制 JVM Java虚拟机 VM Virtual Machine 虚拟机,用 软件 来 模拟 硬件 传统意义上的"虚拟机" 更多指的是 VMWare, Virtual Box, Hyper-V, KVM(构造出虚拟的电脑,甚至可以…...

Linux(3)——基础开发工具

一、软件包管理器——yum 1.Linux下安装程序的方式 在Linux环境下安装软件的方式有以下几个方式: 1)源码安装,直接下载源代码,让它自行编译运行形成可执行程序。 2)软件包安装,下载rpm安装包&#xff0…...

HarmonyOS5云服务技术分享--ArkTS调用函数

✨【HarmonyOS实战指南】手把手教你用ArkTS玩转云函数文件获取✨ 大家好呀今天我们来聊聊如何通过HarmonyOS的ArkTS语言实现云函数文件获取功能。整个过程就像搭积木一样有趣,保证小白也能轻松上手!(文末有完整代码模板哦) &…...

2025年AI搜索引擎发展洞察:技术革新与市场变革

引言:AI搜索的崛起与市场格局重塑 2024-2025年,AI搜索市场迎来了前所未有的变革期。随着DeepSeek-R1等先进大语言模型的推出,传统搜索引擎、AI原生搜索平台以及各类内容平台纷纷加速智能化转型,推动搜索技术从基础信息检索向深度…...

基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究

摘要:随着个性化与小众化消费的崛起,消费者消费心理和模式发生巨大变化,社群构建对商家迎合新型消费特点、融入市场经济发展至关重要。开源链动21模式AI智能名片S2B2C商城小程序的出现,为社群构建提供了创新工具。本文探讨该小程序…...

leetcode 旋转数组 java

本来想用栈或者队列来解决&#xff0c;发现一直报k>nums.length的错。 将原数组下标为 i 的元素放至新数组下标为 (ik)modn 的位置&#xff0c;最后将新数组拷贝至原数组即可。 class Solution {public void rotate(int[] nums, int k) {// Stack<Integer> stack n…...

Ansible模块——通过 URL 下载文件

通过 URL 下载文件 ansible.builtin.get_url 可以通过 URL 下载文件。 选项名 类型 默认值 描述 attributesstrnull 设置文件系统对象的属性&#xff0c;格式参考 lsattr&#xff1b;支持 , -, 操作符。别名&#xff1a;attr。 backupboolfalse 创建目标文件的备份副本&am…...

2025年高考考务人员培训监考员学习项目试题

考务人员培训系统 学员端&#xff08;高考&#xff09; 第1部分&#xff1a;单选题 1. 对违背考试公平、公正原则&#xff0c;在考试中存在违规行为的考生&#xff0c;采用何种处理办法&#xff1f;&#xff08;A &#xff09; [2分] A. 根据《国家教育考试违规处理办法》等…...

谈谈jvm的调优思路

目录 1、G1回收器 2、常用的回收器分类 1、cms 2、G1、Hotspot 3、ZGC 4、设置 3、常见的调优策略 3.1、设定大小 1、堆的大小 2、Region的大小 3、年轻代大小调整 3.2、设置最大停顿时间 3.3、设置标记和回收线程 3.4、并发周期触发阈值 背景 正常情况下&#x…...

通过自签名ssl证书进行js注入的技术,适合注入electron开发的app

由于很多软件都是electron或者pyqt做的安装包,没法像浏览器那样可以直接通过浏览器插件注入js,或者很多网站都有csp限制,无法直接注入js,这种使用自签名代理的方式,完美绕过了所有限制,直接将js注入到外链js中。 步骤:1,局域网准备两台电脑,一个windows,一台Linux,…...

异步复位,同步释放

参考链接&#xff1a;数字电路复位信号设计&#xff08;异步复位、同步释放&#xff09;笔记详解_异步复位同步释放的高有效原理-CSDN博客 一、异步复位&#xff08;Asynchronous Reset&#xff09; 含义&#xff1a;当复位信号 reset 为低&#xff08;或高&#xff0c;视具体…...

Vortex GPGPU的github流程跑通与功能模块波形探索(三)

文章目录 前言一、./build/ci下的文件结构二、基于驱动进行仿真过程牵扯的文件2.1 blackbox.sh文件2.2 demo文件2.3 额外牵扯到的ramulator2.3.1 ramulator简单介绍2.3.2 ramulator使用方法2.3.3 ramulator的输出2.3.4 ramulator的复现2.3.4.1 调试与验证&#xff08;第 4.1 节…...

Ubuntu 安装 Node.js 指定版本指南

Ubuntu 安装 Node.js 指定版本指南&#xff08;适用于生产与开发环境&#xff09; 在没有安装 NVM 的服务器环境中&#xff08;如 Docker、CI/CD、虚拟机等&#xff09;&#xff0c;建议使用 Node.js 官方的二进制包源&#xff08;PPA&#xff09;来快速安装特定版本的 Node.j…...

使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程

使用 Java 开发 Android 应用&#xff1a;Kotlin 与 Java 的混合编程 在开发 Android 应用程序时&#xff0c;我们通常可以选择使用 Java 或 Kotlin 作为主要的编程语言。然而&#xff0c;有些开发者可能会想要在同一个项目中同时使用这两种语言&#xff0c;这就是所谓的混合编…...

安防监控网络摄像机画面异常问题与视频监控管理平台EasyCVR应用

一、方案背景 在安防监控领域&#xff0c;画面卡顿、时有时无等问题犹如隐藏的潜在风险点&#xff0c;不仅严重干扰监控系统的正常运行&#xff0c;更可能在安全防护的关键时刻出现故障&#xff0c;让潜在的风险与隐患有机可乘。想要彻底攻克这些顽疾&#xff0c;就需要我们抽…...

MATLAB中进行语音信号分析

在MATLAB中进行语音信号分析是一个涉及多个步骤的过程&#xff0c;包括时域和频域分析、加窗、降噪滤波、端点检测以及特征提取等。 1. 加载和预览语音信号 首先&#xff0c;你需要加载一个语音信号文件。MATLAB支持多种音频文件格式&#xff0c;如.wav。 [y, fs] audiorea…...

Kotlin 协程 (三)

协程通信是协程之间进行数据交换和同步的关键机制。Kotlin 协程提供了多种通信方式&#xff0c;使得协程能够高效、安全地进行交互。以下是对协程通信的详细讲解&#xff0c;包括常见的通信原语、使用场景和示例代码。 1.1 Channel 定义&#xff1a;Channel 是一个消息队列&a…...

AI 商业化部署中,ollama 和 vllm 的选型对比

介绍 ollama Ollama是指一个开源的大模型服务工具&#xff0c;旨在简化大型语言模型&#xff08;LLM&#xff09;的本地部署、运行和管理。它让用户能够在本地设备上轻松运行和管理各种大语言模型&#xff0c;无需依赖云端服务。 vllm 在深度学习推理领域&#xff0c;vLLM框…...

mysql的乐观锁与悲观锁

1.悲观锁 含义&#xff1a;假设会发生冲突&#xff0c;因此在操作数据之前对数据加锁&#xff0c;确保其他事务无法访问该数据。 应用场景&#xff1a;适用于并发冲突多&#xff0c;写多读少的场景&#xff0c;通过加锁的方式确保数据的安全性。 实现方式&#xff1a;使用行…...

进程——概念及状态

目录 概念 介绍 举例 进程状态 概念 解释 实例 R S T t Z 孤儿进程 概念 介绍 大多数初学者会认为进程就是从硬盘加载到内存的可执行文件&#xff08;当可执行文件被加载到内存里称为程序&#xff09;&#xff0c;实际上并不是这样的&#xff0c;进程其实是操作系…...

服务器数据恢复—Linux系统服务器崩溃且重装系统的数据恢复案例

服务器数据恢复环境&#xff1a; linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障&#xff1a; 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。 服务器数据恢复过程&#…...

【git】git commit模板

【git】git commit模板 目录 【git】git commit模板1.使用git commit 模板操作步骤&#xff1a;使用示例&#xff1a; 2. gitlab merge 模板 1.使用git commit 模板 操作步骤&#xff1a; 设置模板路径,其中path就是commit模板路径 git config --global commit.template path设…...

IGBT选型时需关注的参数,适用场景(高压大电流低频)以及驱动电路设计注意事项

概述 IGBT&#xff08;绝缘栅双极型晶体管&#xff09;是电力控制和电力转换的核心器件&#xff0c;是由BJT&#xff08;双极型晶体管&#xff09;和MOS&#xff08;绝缘栅型场效应管&#xff09;组成的复合全控型电压驱动式功率半导体器件。有高输入阻抗&#xff08;MOSFET优点…...

hghac集群服务器时间同步(chrony同步)

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;银河麒麟&#xff08;龙芯&#xff09;svs,银河麒麟 &#xff08;X86_64&#xff09;,银河麒麟 &#xff08;飞腾&#xff09;,银河麒麟 &#xff08;鲲鹏&#xff09;,银河麒麟 &#xff08;海光&#xff09;,银河麒…...

Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析

一、前言 为什么关注特权&#xff1f; Root&#xff08;超级用户&#xff09;拥有系统所有权限&#xff0c;一旦被滥用或入侵&#xff0c;后果不堪设想。运维与安全的平衡 既需要日常运维中快速提权执行管理任务&#xff0c;又要避免过度开放特权带来的风险。攻防同源理念 了解…...

初识Linux · 数据链路层

目录 前言&#xff1a; 以太网帧协议 ARP协议 ARP协议理解 ARP协议字段 交换机 前言&#xff1a; 前文我们通过OSI模型&#xff0c;一直到TCP/IP四层模型&#xff0c;经过了三篇文章左右的功夫&#xff0c;我们把网络层介绍完毕&#xff0c;主要还是介绍的IP协议的iphdr…...

Linux探秘:驾驭开源,解锁高效能——基础指令

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...

【Linux】第二十二章 访问网络附加内存

1. NFS的主要功能是什么&#xff1f; NFS是由Linux、UNIX及类似操作系统使用的互联网标准协议&#xff0c;主要功能就是提供网络文件共享&#xff0c;允许不同的计算机系统之间通过网络共享文件&#xff0c;它使得网络上的计算机能够像访问本地文件系统一样访问远程计算机上的…...

Revit BIM 模型批量转换为 Datasmith 格式教程

Revit BIM 模型批量转换为 Datasmith 格式教程 一、背景与痛点 在建筑信息模型(BIM)与游戏开发的协同工作中,常需将 Revit 模型导入虚幻引擎(UE)。虽然 Revit 的 Datasmith 插件可实现单文件转换,但面对成百上千个模型时,手动操作效率极低。本文将分享如何开发一个自动…...

Linux 磁盘扩容实战案例:从问题发现到完美解决

Linux 磁盘扩容实战案例&#xff1a;从问题发现到完美解决 案例背景 某企业服务器根目录 (/) 空间不足&#xff0c;运维人员通过 df -h 发现 /dev/vda1 分区已 100% 占满&#xff08;99G 已用&#xff09;。检查发现物理磁盘 /dev/vda 已扩展至 200G&#xff0c;但分区和文件…...

Linux 系统不终止进程的情况下关闭长连接

使用 tcpkill 中断指定 TCP 连接 适用场景&#xff1a;需主动中断已知源IP或目标端口的连接&#xff0c;无需进程重启。 安装 dsniff 工具&#xff08;包含 tcpkill&#xff09;&#xff1a; yum -y install dsniff 捕获并杀死特定连接&#xff08;例如目标IP 192.168.1.10…...

从零开始创建React项目及制作页面

一、React 介绍 React 是一个由 Meta&#xff08;原Facebook&#xff09; 开发和维护的 开源JavaScript库&#xff0c;主要用于构建用户界面&#xff08;User Interface, UI&#xff09;。它是前端开发中最流行的工具之一&#xff0c;广泛应用于单页应用程序&#xff08;SPA&a…...

Unity-编辑器扩展

之前我们关于Unity的讨论都是针对于Unity底层的内容或者是代码层面的东西&#xff0c;这一次我们来专门研究Unity可视化的编辑器&#xff0c;在已有的基础上做一些扩展。 基本功能 首先我们来认识三个文件夹&#xff1a; Editor&#xff0c;Gizmos&#xff0c;Editor Defaul…...

系分论文《论遗产系统演化》

系统分析师论文范文系列 摘要 2022年6月,某金融机构启动核心业务系统的技术升级项目,旨在对其运行超过十年的遗留系统进行演化改造。该系统承担着账户管理、支付结算等关键业务功能,但其技术架构陈旧、扩展性不足,难以适应数字化转型与业务快速增长的需求。作为系统分析师,…...

Django基础(二)Django 项目基础操作

一、实验目标 熟悉 Django 基本命令 理解 Django 项目和应用的目录结构 掌握项目初始化、应用创建与注册、项目启动、视图函数编写、路由配置、数据库配置等基础操作 二、Django 项目初始化 进入虚拟环境 source venv/bin/activate创建 Django 项目 django-admin startproje…...

【图像大模型】Stable Video Diffusion:基于时空扩散模型的视频生成技术深度解析

Stable Video Diffusion&#xff1a;基于时空扩散模型的视频生成技术深度解析 一、架构设计与技术演进1.1 核心模型架构1.2 技术创新点1.2.1 运动预测网络1.2.2 层级式训练策略 二、系统架构解析2.1 完整生成流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础推理代码…...

【免杀】C2免杀技术(七)远程线程注入

远程线程注入&#xff08;Remote Thread Injection&#xff09;是一种常见的进程注入技术&#xff0c;经常用于红队渗透、恶意软件加载、持久化控制等场景中&#xff0c;尤其在免杀&#xff08;AV/EDR bypass&#xff09;应用领域中&#xff0c;是一种历史悠久但依然有效的手段…...

二、【环境搭建篇】:Django 和 Vue3 开发环境准备

【环境搭建篇】&#xff1a;Django 和 Vue3 开发环境准备 前言为什么我们需要特定的开发环境&#xff1f;准备工作第一步&#xff1a;搭建后端开发环境 (Python, Django, DRF)1. 安装 Python2. 创建和激活 Python 虚拟环境3. 在虚拟环境中安装 Django 和 DRF 第二步&#xff1a…...

【神经网络与深度学习】激活函数的可微可导

引言&#xff1a; 在深度学习领域&#xff0c;激活函数扮演着至关重要的角色。它不仅影响神经网络的非线性建模能力&#xff0c;还直接关系到梯度计算的稳定性。在优化过程中&#xff0c;我们通常要求激活函数具有良好的数学性质&#xff0c;其中可微性是一个关键条件。相比简单…...

【Tauri2】046—— tauri_plugin_clipboard_manager(一)

目录 前言 正文 安装 Rust中的使用 对文字的操作 看看write_text的函数签名 看看read_text的函数签名 对图像的操作 对html的操作 总结 前言 这篇就来看看clipboard这个插件。 参考如下 Clipboard | Taurihttps://tauri.app/plugin/clipboard/ 正文 安装 执行下…...

高效选课系统:一键管理你的课程表

选课流程 数据模型 我的课程表Controller Api(value "我的课程表接口", tags "我的课程表接口") Slf4j RestController public class MyCourseTablesController {Autowiredprivate MyCourseTablesService myCourseTablesService;ApiOperation("添加…...

Pytorch分布式训练,数据并行,单机多卡,多机多卡

分布式训练 所有代码可以见我github 仓库&#xff1a;https://github.com/xiejialong/ddp_learning.git 数据并行&#xff08;Data Parallelism&#xff0c;DP&#xff09; 跨多个gpu训练模型的最简单方法是使用 torch.nn.DataParallel. 在这种方法中&#xff0c;模型被复制…...

Secarmy Village: Grayhat Conference靶场

Secarmy Village: Grayhat Conference 来自 <Secarmy Village: Grayhat Conference ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶…...

centos 9 Kickstart + Ansible自动化部署 —— 筑梦之路

目标 利用 Kickstart 完成 centos 9 系统的全自动安装&#xff08;裸金属/虚拟机&#xff09;。 安装完成后自动接入 Ansible 进行软件包、服务、用户、配置等系统初始化操作。 实现一套通用、可重复、可维护的自动化交付流程。 KS文件 # ks.cfg 示例 install lang zh_CN.…...

HarmonyOS应用开发入门宝典——项目驱动学习法实践

学习一项新技能&#xff0c;最好也是最快的方法就是动手实战。学习鸿蒙也一样&#xff0c;给自己定一个小目标&#xff0c;直接找项目练&#xff0c;这样进步是最快的。记住&#xff0c;最好的学习时机永远是现在&#xff0c;最好的老师永远是你正在开发的项目。 一、为什么选择…...

Python类的力量:第六篇:设计模式——Python面向对象编程的“架构蓝图”

文章目录 前言&#xff1a;从“代码堆砌”到“模式复用”的思维跃迁 一、创建型模式&#xff1a;对象创建的“智能工厂”1. 单例模式&#xff08;Singleton&#xff09;&#xff1a;全局唯一的“资源管家”2. 工厂模式&#xff08;Factory&#xff09;&#xff1a;对象创建的“…...

第50天-使用Python+Qt+DeepSeek开发AI运势测算

1. 环境准备 bash 复制 下载 pip install pyside6 requests python-dotenv 2. 获取DeepSeek API密钥 访问DeepSeek官网注册账号 进入控制台创建API密钥 在项目根目录创建.env文件: env 复制 下载 DEEPSEEK_API_KEY=your_api_key_here 3. 创建主应用框架 python 复制…...

CentOS系统上挂载磁盘

在CentOS系统上挂载磁盘&#xff0c;主要包括查看磁盘设备、分区&#xff08;若需要&#xff09;、格式化、创建挂载点和挂载等步骤&#xff0c;以下是详细操作&#xff1a; 1. 查看磁盘设备 使用fdisk -l或lsblk命令查看系统识别到的磁盘设备。 fdisk -l&#xff1a;列出所…...

(一) 本地hadoop虚拟机系统设置

1.配置固定IP地址&#xff08;每一台都配置&#xff09; 开启node1&#xff0c;修改主机名为node1&#xff0c;并修改固定IP为&#xff1a;192.168.88.131 # 修改主机名 hostnamectl set-hostname node1# 修改IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR"…...

亿级核心表如何优雅扩展字段

1 导语 亿级数据的核心表新增一个字段&#xff0c;远不止一句简单的“ALTER TABLE”&#xff0c;锁表风险、页分裂、索引性能衰减……每一个问题都可能引发线上事故。如何在不影响业务的前提下&#xff0c;只需简单的配置&#xff0c;即可实现字段的动态扩展&#xff1f;本文将…...