日拱一卒 | 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等等这些回收器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/385740.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁? 大疆研发软件团队,致力于把大疆的硬件设备和大疆用户紧密连接在一起,我们的使命是“让机器有温度,让数据会说话”。 在消费和手持团队,我们的温度来自于激发用户灵感并助力用户创作…

破局产品同质化:解锁3D交互式营销新纪元!

近年来,随着数字体验经济的蓬勃发展,3D交互式营销作为一种创新手段迅速崛起,它巧妙地解决了传统产品展示中普遍存在的缺乏差异性和互动性的问题,使您的产品在激烈的市场竞争中独树一帜,脱颖而出。 若您正面临产品营销…

基于.NET开源、强大易用的短链生成及监控系统

前言 今天大姚给大家分享一个基于.NET开源(MIT License)、免费、强大易用的短链生成及监控系统:SuperShortLink。 项目介绍 SuperShortLink是一个基于.NET开源(MIT License)、免费、强大易用的短链生成及监控系统&a…

java算法day25

java算法day25 广度优先搜索岛屿数量深搜岛屿数量广搜994 腐烂的橘子 广度优先搜索 核心:从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。搜索的方式是上下左右 一张图说明白模拟…

【目标检测】Yolo5基本使用

前言 默认安装好所有配置,只是基于Yolo5项目文件开始介绍的。基于配置好的PyCharm进行讲解配置。写下的只是些基本内容,方便以后回忆用。避免配置好Yolo5的环境,拉取好Yolo5项目后,不知道该如何下手。如果有时间,我还是…

SeaCMS海洋影视管理系统远程代码执行漏洞复现

SeaCMS海洋影视管理系统远程代码执行漏洞复现 Ⅰ、环境搭建Ⅱ、漏洞复现Ⅲ、漏洞分析 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责&…

2024年7月29日 十二生肖 今日运势

小运播报:2024年7月29日,星期一,农历六月廿四 (甲辰年辛未月甲午日),法定工作日。 红榜生肖:羊、虎、狗 需要注意:兔、牛、鼠 喜神方位:东北方 财神方位:…

扰动观测器DOB设计及其MATLAB/Simulink实现

扰动观测器(Disturbance Observer, DOB)是一种在控制系统中用于估计和补偿未知扰动的重要工具,以增强系统的鲁棒性和稳定性。其设计过程涉及系统建模、观测器结构设计以及控制律的调整。 扰动观测器设计原理 系统建模: 首先,需要建立被控对象的数学模型,明确系统的状态变…

HiveSQL题——炸裂+开窗

一、每个学科的成绩第一名是谁? 0 问题描述 基于学生成绩表输出每个科目的第一名是谁呢? 1 数据准备 with t1 as(selectzs as name,[{"Chinese":80},{"Math":70},{"English"…

mac下通过brew安装mysql的环境调试

mac安装mysql 打开终端,运行命令(必须已经装过homebrew哦): 安装brewbin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"已安装brew直接运行:brew install mysql8.0报…

SQL labs-SQL注入(三,sqlmap使用)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言: 盲注简述:是在没有回显得情况下采用的注入方式,分为布尔盲注和时间盲注。 布尔盲注:布尔仅有两种形式,ture&#…

python拼接字符串方法

文章目录 1. 使用加号()2. 使用str.join()方法3. 使用格式化字符串(f-strings, % 操作符, .format() 方法)4. 使用列表推导式和join()结合 性能对比 在Python中,字符串拼接是将两个或多个字符串合并成一个新字符串的过…

【LeetCode】141.环形链表、142. 环形链表 II(算法 + 图解)

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:数据结构 📚本系列文章为个人学…

C/C++大雪纷飞代码

目录 写在前面 C语言简介 EasyX简介 大雪纷飞 运行结果 写在后面 写在前面 本期博主给大家带来了C/C实现的大雪纷飞代码,一起来看看吧! 系列推荐 序号目录直达链接1爱心代码https://want595.blog.csdn.net/article/details/1363606842李峋同款跳…

大数据之数据湖

数据湖(Data Lake)是一个集中式存储库,用于存储大量的原始数据,包括结构化、半结构化和非结构化数据。这些数据可以以其原始格式存储,而不需要事先定义结构(即模式),这与传统的数据仓…

【STM32】STM32单片机入门

个人主页~ 这是一个新的系列,stm32单片机系列,资料都是从网上找的,主要参考江协科技还有正点原子以及csdn博客等资料,以一个一点没有接触过单片机但有一点编程基础的小白视角开始stm32单片机的学习,希望能对也没有学过…

昇思25天学习打卡营第3天|基础知识-数据集Dataset

目录 环境 环境 导包 数据集加载 数据集迭代 数据集常用操作 shuffle map batch 自定义数据集 可随机访问数据集 可迭代数据集 生成器 MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transfor…

Kylin 入门教程

Apache Kylin 是一个开源的分布式数据仓库和 OLAP(在线分析处理)引擎,旨在提供亚秒级查询响应时间,即使在处理超大规模数据集时也是如此。Kylin 可以有效地将原始数据预计算为多维数据立方体(Cube),并利用这些预计算结果来提供快速查询。本文将带你从基础知识到操作实践…

构建大规模账号池与本地部署:GitHub爬虫项目详解

账号池搭建 必要性 常见登录方式: 基于Session Cookie的登录基于JWT的登录:登录生成JWT字符串 账号池存储cookie或者JWT字符串 方便后续发请求爬取数据 本地部署 conda建立一个虚拟环境 conda create -n new_env python3.x # 替换 x 为你需要的 P…

p28 vs环境-C语言实用调试技巧

int main() { int i0; for(i0;i<100;i) { printf("%d",i); } } 1.Debug 和Release的介绍 Debug通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不做任何优化&#xff0c;便于程序员调试程序。 Release称为发布版本&#x…