日拱一卒 | JVM
文章目录
- 什么是JVM?
- JVM的组成
- JVM的大致工作流程
- JVM的内存模型
什么是JVM?
我们知道Java面试,只要你的简历上写了了解JVM,那么你就必然会被问到以下问题:
- 什么是JVM?
- 简单说一下JVM的内存模型?
- 类的加载的过程是怎样的?
- 什么叫内存溢出、堆栈溢出、逃逸分析?
大家可能大概知道JVM是个什么东西,但很难把他完全说清楚
这些零散的问题,如果没有一个结构来容纳,将会很难记忆,也很难联系起来
我们今天就系统的聊一下JVM,以及经常问到的关于JVM的面试题
JVM的组成
先看这张图

JVM共由四个模块组成,其中包含为两个子系统和两个组件,分别为:
- class loader 类加载系统
- execution engine 执行引擎子系统
- runtime data area 运行时数据区组件
- native interface 本地借口组件
面试中 最经常问到的就是 1、3两个,类加载器、内存模型。
相信大家都有体会~
那我们先来讲讲JVM工作的完整流程,再来详细讲讲这两个面试中最经常问到的两个组件。
JVM的大致工作流程
首先通过编译器把Java源代码转换成字节码,class loader类装载器再把字节码加载到内存中,将其放在运行时运行数据区的方法区内,而字节码文件仅是JVM的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析,执行引擎execution engine,将字节码翻译成底层的系统指令,再交给CPU去执行,而这个过程中需要调用其他语言的本地库接口,native interface来实现整个程序的功能。
好了,有了这个大概的认识,我们大概能了解每个部分分别的功能和作用。
下面我们来聊聊面试工程中经常问到的关于JVM的问题。

我们从最常问到的问题开始
JVM的内存模型
首先是内存模型内存模型,一共有五个单元,分别是程序计数器方法区对站和本地方法站这个如果直接来寄可能比较难寄,我们通过实际实验过程中内存创建的规律来记忆会更方便一些,首先一个县城创建,他会带出三个东西,分别叫做程序技术器和加虚拟之战以及本地方法站这三个单元
那另外两个单元方法区和堆就是县城共享的区域
我们分别说一下每一个区域它的功能新程序技术器,它是县城私有的一个县城创建之后,他就会有一个程序技术器,他存在的意义是当我们操作系统中现成数超过CPU的合数的时候,那我们执行如果就存在现场等待的情况,为了记住我们这个县城当前已经执行到哪个步骤了,所以就存在一个东西,要做程序技术器记录县城正在指执行的这个将要执行下一步骤的这个指令的地址
我们分别说一下每一个区域它的功能新程序技术器,它是县城私有的一个县城创建之后,他就会有一个程序技术器,他存在的意义是当我们操作系统中现成数超过CPU的合数的时候,那我们执行如果就存在现场等待的情况,为了记住我们这个县城当前已经执行到哪个步骤了,所以就存在一个东西,要做程序技术器记录县城正在指执行的这个将要执行下一步骤的这个指令的地址第二个东西叫做嘉华逊基站嘉兴站是每个县城都会有一个叫训练机站他从每这个站里会存在若干个战争,每个战争保存一个方法的入餐出餐静态变量,还有这个返回值等地址等等,再就是本地方发展本地方法,但他的作用和教训激战作用是类似的,只不过他提供的他是为这个本地方法native Mike提供这个战争战争的记录
第二个东西叫做嘉华逊基站嘉兴站是每个县城都会有一个叫训练机站他从每这个站里会存在若干个战争,每个战争保存一个方法的入餐出餐静态变量,还有这个返回值等地址等等,再有就是本地方发展本地方法,但他的作用和教训激战作用是类似的,只不过他提供的他是为这个本地方法native Mac提供这个战争战争的记录
OK,下面是性能调优的部分,我们这V M一共有哪些参数以及我们做G的性能分析工具有哪些工具这部分我们先跳过不讲
OK,下面是性能调优的部分,我们这V M一共有哪些参数?以及我们做G的性能分析工具有哪些工具这部分我们先跳过,不讲在下面就是执行模式,一个Clas文件在被执行时会经过哪些过程它的完整的生命周期是哪些?
然后就是类加载的过程,首先我们有一个基础知识叫做双庆委派机制双庆委派机制是什么就是当我们一个例假的气需要加载一个Clas的时候,他会先去找他的负累,询问他的负累,让他的副理信息加载这个类,如果他的父类加载不了,然后他再让他的负累的负累再来尝试加载如果,所有的父类加载不了才会上之类赖加载
所有的父类加载不了,再才会上之内赖加载常见的内下载器,一共有四种第一种是B strap类下载器,他是加载我们家最底层代码这个类,然后是ex深深立下的气,再是什么家的气,最后是自定义的那家的气
关于兵器优化一共有哪些内容?首先公共指表达式的消除以指令重拍内敛,还有我们比较常问道的陶艺分析理论,他分析的方法是什么?现场是怎么做到一分析的,还有我们线上是如何分配空间以及同步消除的。
关于兵器优化一共有哪些内容?首先公共指表达式的消除以指令重排内敛,还有我们比较常问道的陶艺分析理论,他分析的方法是什么?现场是怎么做到一分析的还有我们现站上是如何分配空间以及同步消除的一些问题,最后呢,就是我们的GCGC是一个更长见的问题,JC首先分为了两个问题,一个是分类回收,还有一是回收器的实现风带回收,我们可以分为这个新生代老年代,然后当然在最新的这个哪里会出去几万中出现了这个叫持久代这个概念
,最后呢,就是我们的GCGC是一个更长见的问题,JC首先分为了两个问题,一个是分类回收,还有一是回收器的实现风带回收,我们可以分为这个新生代老年代,然后当然在最新的这个那里会出去几万中出现了这个叫持久代这个概念回收期的实现有哪些?我们有创新的回收期,并且回收期C MSG o还有Z GC等等这些回收器。
相关文章:
日拱一卒 | JVM
文章目录 什么是JVM?JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM? 我们知道Java面试,只要你的简历上写了了解JVM,那么你就必然会被问到以下问题: 什么是JVM?简单说一下JVM的内存模型?…...
乐尚代驾六订单执行一
加载当前订单 需求 无论是司机端,还是乘客端,遇到页面切换,重新登录小程序等,只要回到首页面,查看当前是否有正在执行订单,如果有跳转到当前订单执行页面 之前这个接口已经开发,为了测试&…...
SciPy 与 MATLAB 数组
SciPy 与 MATLAB 数组 SciPy 是一个开源的 Python 库,广泛用于科学和工程计算。它构建在 NumPy 数组的基础之上,提供了许多高级科学计算功能。MATLAB 是一个高性能的数值计算环境,它也使用数组作为其基础数据结构。在这篇文章中,我们将探讨 SciPy 和 MATLAB 在数组操作上的…...
基于vue-grid-layout插件(vue版本)实现增删改查/拖拽自动排序等功能(已验证、可正常运行)
前端时间有个需求,需要对33(不一定,也可能多行)的卡片布局,进行拖拽,拖拽过程中自动排序,以下代码是基于vue2,可直接运行,报错可评论滴我 部分代码优化来自于GPT4o和Clau…...
DBoW3相关优化脉络
1 DBow3 GitHub - rmsalinas/DBow3: Improved version of DBow2 2 优化后得到fbow GitHub - rmsalinas/fbow: FBOW (Fast Bag of Words) is an extremmely optimized version of the DBow2/DBow3 libraries. 其中fbow是ucoslam的一部分; ucoslam GitHub - la…...
qt 如何制作动态库插件
首先 首先第一点要确定我们的接口是固定的,也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…...
一种docker start放回Error response from daemon: task xxx错误的解决方式
1. 问题描述 执行systemctl daemon-reload与systemctl restart docker命令后,发现docker中有的应用无法启动,并显示出Exit(255)的错误提示。 重新执行docker start 容器id后发现返回,Error response from daemon: task xxx的错误。 2. 问题…...
规控面试常见问题
一、项目中遇到的困难或者挑战是什么? 二、A*算法原理(伪代码) 输入:代价地图、start 、 goal(Node结构,包含x、y、g、h、id、pid信息) 首先初始化:创建一个优先级队列openlist,它是一个最小堆,根据节点的f值排序 ( priority_queue<Node, std::vector<Node…...
代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙
代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…...
【全网最全】CSDN博客的文字颜色、字体和字号设置
文章目录 一、字体颜色二、字体大小三、字体类型四、字体背景色 在这篇博客中,我们将深入探讨如何在Markdown编辑器中设置文字颜色、大小、字体与背景色。Markdown本身并不直接支持这些功能,但通过结合HTML标签和CSS样式,我们可以实现这些视觉…...
C#实现数据采集系统-Mqtt实现采集数据转发
在数据采集系统中,通过ModbusTcp采集到数据之后,再通过MQTT转发到其他应用 MQTT操作 安装MQTT mqtt介绍和环境安装 使用MQTT 在C#/Net中使用Mqtt MQTT类封装 MQTT配置类 public class MqttConfig{public string Ip {get; set;...
common-intellisense:助力TinyVue 组件书写体验更丝滑
本文由体验技术团队Kagol原创~ 前两天,common-intellisense 开源项目的作者 Simon-He95 在 VueConf 2024 群里发了一个重磅消息: common-intellisense 支持 TinyVue 组件库啦! common-intellisense 插件能够提供超级强大的智能提示功能&…...
图片在线压缩有效方法详解,分享7款最佳图片压缩工具免费(全新)
当您的系统中图片数量不断增加,却无法删除时,那么就需要通过图片压缩来解决您的问题。随着图片文件的增大,高分辨率图片占据了大量存储空间。而此时系统中的存储空间也开始变得不够用,无法跟上高质量图片的增长。因此,…...
electron安装及快速创建
electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网:https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹,并执行npm 初始化命…...
需要消化的知识点
需要消化 消灭清单 如何自定义一个Interceptor拦截器? 后端开发可以用上的前端技巧 10个堪称神器的 Java 学习网站. 【前端胖头鱼】11 chrome高级调试技巧,学会效率直接提升666% 【前端胖头鱼】10个我经常逛的“小网站” 【前端劝退师lv-6】Chrome D…...
2024年7月25日(Git gitlab以及分支管理 )
分布式版本控制系统 一、Git概述 Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由Linus Torvalds创建的,最 初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开 发人员之间进行协作。 Github 用的就是Git系统来管理它们的…...
pdf格式过大怎么样变小 pdf文件过大如何缩小上传 超实用的简单方法
面对体积庞大的 PDF 文件,我们常常需要寻找有效的方法来缩减其大小。这不仅能够优化存储空间,还能提升文件的传输和打开速度。PDF文件以其稳定性和跨平台兼容性成为工作和学习中的重要文件格式。然而,当我们需要通过邮件发送或上传大文件时&a…...
前端文件下载word乱码问题
记录一次word下载乱码问题: 用的请求是axios库,然后用Blob去接收二进制文件 思路:现在的解决办法有以下几种,看看是对应哪种,可以尝试解决 1.将响应类型设为blob,这也是最重要的,如果没有解决…...
repo中的default.xml文件project name为什么一样?
文章目录 default.xml文件介绍为什么 name 是一样的,path 不一样?总结 default.xml文件介绍 在 repo 工具的 default.xml 文件中,定义了多个 project 元素,每个元素都代表一个 Git 仓库。 XML 定义了多个不同的 project 元素&…...
<section id=“nice“ data-tool=“mdnice编辑器“ data-webs
大模型日报 2024-07-24 大模型资讯 Meta发布最大Llama 3 AI模型,语言和数学能力提升 摘要: Meta公司发布了其迄今为止最大的Llama 3人工智能模型。该模型主要免费提供,具备多语言处理能力,并在语言和数学方面表现出显著提升。 Meta发布最强AI…...
别再死记硬背公式了!用“预测-更新”的贝叶斯视角,5分钟看懂卡尔曼滤波核心
卡尔曼滤波:用贝叶斯思维解决自动驾驶中的不确定性追踪问题 想象一下你正驾驶一辆特斯拉行驶在高速公路上,车载雷达显示前方100米处有一辆卡车。但下一秒雷达数据突然跳变到105米,而摄像头却显示距离是98米。作为人类司机,你会本能…...
Cortex-R52性能监控与调试架构深度解析
1. Cortex-R52性能监控单元架构解析在嵌入式实时系统中,性能监控单元(PMU)如同汽车的仪表盘,为开发者提供处理器内部运行状态的实时数据。Cortex-R52的PMU模块采用三级监控架构:1.1 事件采集层处理器内部部署了45个专用硬件计数器,…...
保姆级教程:手把手教你用MuJoCo和Spinning Up让UR5机械臂学会‘指哪打哪’
从零实现UR5机械臂强化学习控制:MuJoCo与Spinning Up实战指南 看着实验室里崭新的UR5机械臂,你是否想过让它像人类手臂一样灵活地指向任意位置?传统控制方法需要复杂的运动学计算,而强化学习能让机械臂通过"试错"自主掌…...
对比直接使用官方 API 体验 Taotoken 聚合接入在配置简化上的优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用官方 API 体验 Taotoken 聚合接入在配置简化上的优势 对于需要调用多种大模型能力的开发者而言,直接与各家…...
ROS2机械臂实战:ros2_control、moveit2与move_group核心问题排查与解决
1. ROS2机械臂开发中的常见问题与调试思路 最近在做一个ROS2机械臂项目,用到了ros2_control、moveit2和move_group这几个核心组件。说实话,从零开始搭建这套系统踩了不少坑,特别是硬件接口初始化、控制器配置这些环节。今天就把我遇到的一些典…...
从IR压降到远程采样:大电流PCB供电设计的实战经验与陷阱规避
1. 项目背景与问题浮现几年前,我参与了一个项目,主电源是一个标准的开放式机架电源,需要为一个位于机箱内相对较远的模块提供5V、约20A的直流电。最初的供电路径设计是依靠PCB走线,我们使用了1盎司铜厚的板材。问题很快就出现了&a…...
AI智能体集成Telegram:双模式MCP服务器原理与实战部署
1. 项目概述 如果你正在为你的AI助手(比如Claude、Cursor的Composer,或者其他支持MCP协议的智能体)寻找一个功能强大、接入灵活的Telegram集成方案,那么你很可能已经厌倦了那些功能单一、配置复杂的传统机器人框架。今天要聊的这…...
HFSS新手避坑指南:手把手教你设置Floquet Port和主从边界(附矩形波导实例)
HFSS阵列仿真实战:从Floquet Port到主从边界的精准设置 第一次打开HFSS准备仿真周期性结构时,那种既兴奋又忐忑的心情我至今记忆犹新。作为计算电磁学领域的黄金标准工具,HFSS在阵列天线、频率选择表面等周期性结构分析中展现出无可替代的价…...
避开这些坑!在Colab上运行AlphaFold2时,参数、路径和依赖库的常见错误排查指南
避开这些坑!在Colab上运行AlphaFold2时,参数、路径和依赖库的常见错误排查指南 在Google Colab上运行AlphaFold2看似简单,但实际操作中90%的用户都会遇到各种"诡异"报错。上周一位结构生物学博士向我吐槽:"明明按照…...
为什么2025年是AI Agent的爆发元年?
目录为什么2025年是AI Agent的爆发元年?引言:一个被产业界共同认定的“元年”一、产业共识:为什么“元年”不是一个空洞的口号?1.1 从“千模大战”到“智能体竞速”1.2 权威机构的一致判断1.3 市场规模的数据佐证二、技术底座&…...
