高频面试题|JVM虚拟机的体系结构是什么样的?

news2024/9/21 16:30:30

一. 前言

最近有很多小伙伴都在找工作,他们在面试时经常被面试官问到一个问题:请说说JVM虚拟机的体系结构是什么样的?

很多小伙伴都能说出堆、栈等相关内容,但面试官紧接着又问,你还知道其他内容吗?这时不少小伙伴就语塞了.......

于是就有小伙伴面试完跑来问壹哥,这个问题到底该怎么回答才能拿高分。所以今天壹哥就在这里,给大家讲讲JVM虚拟机体系结构的深层内容,让你下次面试时可以直接反虐面试官。

二. 题目考点

在梳理今天的面试要点之前,壹哥先给大家分析一下面试官的心理。如果面试官是壹哥的话,那么我想考查的,其实就是候选人是否对JVM虚拟机有一个宏观的理解。

其实大家可以来想一下,面试官为什么要问这个问题?主要是因为我们进行JVM优化的第一步,就是要先理解整个JVM虚拟机的体系结构和作用,然后再学习JVM的垃圾回收机制、JVM分析的命令等内容,最后才会进行JVM的调优或者优化。只有对JVM虚拟机有整体的理解和把握,我们才能对JVM进行更深入的使用和优化。

下面就是壹哥给大家整理的关于JVM虚拟机的整体学习思路和内容:

有了对JVM的整体了解,接下来我们就可以进一步对这道面试题进行分析了。

三. 解题分析

下面是壹哥为大家整理的解题思路,单看这张图就很用心吧,拿去不谢哦。

这里JVM虚拟机的结构一共可以分为九个部分,如下图所示:

接下来壹哥再简单说一下每个部分的核心作用。

3.1类加载器

类加载器(class loader)用来把Java类加载到Java的虚拟机中。

Java源程序(.java 文件)在经过 Java编译器编译之后,生成了对应的Java 字节代码(.class 文件),然后类加载器就负责读取这些Java的字节代码,并将其转换成java.lang.Class类的一个实例。每个这样的实例都用来表示一个Java 类,JVM可以通过此实例的 newInstance()方法创建出该类的一个对象。

3.2方法区

Java的方法区和堆类似,方法区是一块所有线程都可以共享的内存区域,它保存着系统的类信息,比如类的字段、方法、常量池等。

3.3Java堆

堆内存用于存放由new操作创建出来的对象和数组,例如new String()创建一个对象,而这个对象就会放入到Java堆中进行存储。

3.4Java栈

栈是线程私有的,它的生命周期与线程相同,用于存储局部变量、动态链接、方法出口等信息。

3.5直接内存

直接内存并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域。主要是用于提高一些场景中的性能,比如在NIO中增加NIO的性能。

3.6. 本地方法栈

本地方法栈用于本地方法的调用。我们知道,在JDK源码中很多地方使用了Native关键字,这就是在调用底层C语言编写的本地方法。

3.7. 垃圾回收系统

垃圾回收器也叫做垃圾回收系统,主要用于在JVM运行时回收垃圾(不再引用的对象),释放被占用的内存。

3.8. PC寄存器

在每个线程启动时JVM都会创建一个PC寄存器,用于保存下一条将要执行的指令地址。PC寄存器的内容总是指向下一条即将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

3.9. 执行引擎

执行引擎主要是用于执行编译后的字节码指令。

四. 小结

经过上面的一系列分析,最后壹哥来给大家总结下这个问题的完整答案:

JVM虚拟机体系结构一共分为九个部分:类加载器、方法区、Java堆、Java栈、直接内存、本地方法栈、垃圾回收器、PC寄存器、执行引擎等。

请大家一定要牢记,这可是一道高频的面试题哦!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32模拟SPI协议获取24位模数转换(24bit ADC)芯片AD7791电压采样数据

STM32模拟SPI协议获取24位模数转换(24bit ADC)芯片AD7791电压采样数据 STM32大部分芯片只有12位的ADC采样性能,如果要实现更高精度的模数转换如24位ADC采样,则需要连接外部ADC实现。AD7791是亚德诺(ADI)半导体一款用于低功耗、24…

C语言--回调函数

1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义。我在百度上搜了一下,发现众说纷纭,有很大一部分…

力扣-部门工资前三高的所有员工

大家好,我是空空star,本篇带大家了解一道稍微复杂的力扣sql练习题。 文章目录前言一、题目:185. 部门工资前三高的所有员工二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.其他总结前言 上一篇带大家练习了部门工资最高的…

CUDA硬件实现

CUDA硬件实现 文章目录CUDA硬件实现4.1 SIMT 架构4.2 硬件多线程NVIDIA GPU 架构围绕可扩展的多线程流式多处理器 (SM: Streaming Multiprocessors) 阵列构建。当主机 CPU 上的 CUDA 程序调用内核网格时,网格的块被枚举并分发到具有可用执行能力的多处理器。一个线程…

【C++】1.C++基础

1.命名空间 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。 1定义 定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对…

DepGraph:适用任何结构的剪枝

文章目录摘要1、简介2、相关工作3、方法3.1、神经网络中的依赖关系3.2、依赖关系图3.3、使用依赖图剪枝4、实验4.1、设置。4.2、CIFAR的结果4.3、消融实验4.4、适用任何结构剪枝5、结论摘要 论文链接:https://arxiv.org/abs/2301.12900 源码:https://gi…

软考高级-信息系统管理师之质量管理(最新版)

质量管理目录 项目质量管理质量管理基础质量与项目质量质量管理质量管理标准体系1、IS09000系列,8项基本原则如下。2、全面质量管理(TQM)3、六西格码意为“六倍标准差”,4、软件过程改迸与能力成熟度模型项目质量管理过程规划质量管理1、规划质量管理2、规划质量管理:输入3、…

【java】Spring Cloud --Spring Cloud 的核心组件

文章目录前言一、Eureka(注册中心)二、Zuul(服务网关)三、 Ribbon(负载均衡)四、Hystrix(熔断保护器)五、 Feign(REST转换器)六、 Config(分布式配…

【C++】RBTree——红黑树

文章目录一、红黑树的概念二、红黑树的性质三、红黑树节点的定义四、红黑树的插入五、代码实现一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上…

Python爬虫(7)selenium3种弹窗定位后点击操作,解决点击登录被隐藏iframe无法点击的登陆问题

之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览…

看见统计——第四章 统计推断:频率学派

看见统计——第四章 统计推断:频率学派 接下来三节的主题是中心极限定理的应用。在不了解随机变量序列 {Xi}\{X_i\}{Xi​} 的潜在分布的情况下,对于大样本量,中心极限定理给出了关于样本均值的声明。例如,如果 YYY 是一个 N(0&am…

Spring系列-2 Bean的生命周期

背景: 作为Spring系列的第二篇,本文结合容器的启动流程介绍单例Bean的生命周期,包括Bean对象的创建、属性设置、初始化、使用、销毁等阶段;在此过程中会介绍Spring用于操作Bean或者BeanDefinition的相关扩展接口。 文章重心在于介…

Spring Boot 日志文件,你都会了吗?

目录 1、日志文件的作用 2、日志的使用 2.1、从程序中得到日志对象 2.2、使用日志 2.3、日志格式 3、日志级别 3.1、这样的日志级别有什么用? 3.2、日志级别分类和使用 3.3、日志级别设置 4、日志持久化 5、更简单的日志输出——lombok 5.1、对比 5.2、…

阅读源码和查看官方文档,是解决问题最高效的办法。

作为一个工作8年的老程序员告诉你:阅读源码和查看官方文档,是解决问题最高效的办法。不信你来看,这个困扰了读者半天的问题我查了源码和文档后瞬间解决。 前言 上周五有位读者私信我一个问题,说困扰了他半天,研究了一…

利用Rust与Flutter开发一款小工具

1.起因 起因是年前看到了一篇Rust iOS & Android|未入门也能用来造轮子?的文章,作者使用Rust做了个实时查看埋点的工具。其中作者的一段话给了我启发: 无论是 LookinServer 、 Flipper 等 Debug 利器,还是 Flutt…

基于springboot+vue的疾病匿名检测查询系统

基于springbootvue的疾病匿名检测查询系统 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背…

【拥抱开源】发布自己的项目到maven中央仓库

文章目录🎈第一步,注册账号💿第二步,登录📀第三步,设置信息💾第四步,创建问题📹第五步,验证信息🎥第六步,上传jar包到中央仓库&#x…

网页中字体混淆的处理(简易方法)——爬虫学习笔记

网页中字体混淆的处理——爬虫学习笔记之评论爬取一、网页分析1、打开某点评网址。2、在网页源代码中寻找评论信息(1)进入这个“火锅店”的详情页,然后右击“检查”(2)点上面“刷新”详情页,逐步寻找。&…

RK3288 GPIO记录

1、引脚对应的GPIO 编号第一种 使用/sys/kernel/debug/gpio查询所有gpio引脚的基数第二种 cat /sys/class/gpio/gpiochip248/label对应的label就是GPIO引脚,例如下图GPIO8对应的基数就是2482、计算编号编号 基数 PIN脚如GPIO8的基数是248, GPIO8_A6的编…

Java开发 - 数风流人物,还看“微服务”

目录 前言 服务器端的发展历程 早期的服务器 动态的页面 用户内容网站 微服务 企业级应用 互联网应用 微服务介绍 什么是微服务? 为什么使用微服务 怎么使用微服务 Spring Cloud 什么是Spring Cloud Nacos注册中心 什么是Nacos 创建微服务项目 创建…