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

jvm架构原理剖析篇


简单题(5道)

考查内容:JVM运行时数据区域

题干:Java虚拟机栈的主要作用是?
A. 存储对象实例
B. 存储方法调用和局部变量
C. 存储静态字段
D. 存储字节码指令
正确答案:B
解析:虚拟机栈用于存储方法调用帧(包括局部变量表和操作数栈),对象实例存储在堆中,静态字段存储在方法区,字节码指令存储在方法区。


考查内容:类加载机制

题干:以下哪个不是类加载的阶段?
A. 加载
B. 验证
C. 编译
D. 初始化
正确答案:C
解析:类加载分为加载、验证、准备、解析、初始化,编译是JIT编译器的行为,不属于类加载阶段。


考查内容:垃圾回收算法

题干:Mark-Sweep算法的主要缺点是?
A. 需要STW(Stop-The-World)
B. 无法处理循环引用
C. 产生内存碎片
D. 依赖分代思想
正确答案:C
解析:Mark-Sweep算法标记存活对象后直接清理,可能导致内存碎片化,而循环引用可通过算法检测,分代是优化策略。


考查内容:内存模型

题干volatile关键字的主要作用是?
A. 保证原子性
B. 防止指令重排序
C. 创建线程副本
D. 锁定内存地址
正确答案:B
解析volatile通过禁止指令重排序和提供可见性保证,但不保证原子性,线程副本是旧版JMM的概念。


考查内容:JVM架构

题干:以下哪项属于JVM运行时数据区?
A. 寄存器
B. 本地方法栈
C. 内核栈
D. 硬件缓存
正确答案:B
解析:JVM数据区包括虚拟机栈、本地方法栈、堆、方法区和程序计数器,其他选项属于系统或硬件层面。


中等题(10道)

考查内容:垃圾回收机制

题干:CMS(Concurrent Mark Sweep)的正确描述是?
A. 基于标记-清除算法
B. 需要完全STW
C. 适合老年代回收
D. 会产生紧凑内存
正确答案:A
解析:CMS采用标记-清除算法,并发标记和清理减少STW,主要针对老年代,但会留下内存碎片。


考查内容:类加载机制

题干:双亲委派模型的作用是?
A. 加快类加载速度
B. 避免类冲突
C. 优先加载自定义类
D. 减少内存占用
正确答案:B
解析:双亲委派通过优先加载核心类库(如java.lang包),避免用户类覆盖核心类,确保安全。


考查内容:内存模型

题干synchronized块对锁的影响是?
A. 升级为重量级锁
B. 触发GC操作
C. 释放锁后对象可被回收
D. 阻塞其他线程访问
正确答案:C
解析synchronized解锁后,对象监视器不再持有,若无其他引用则对象可被回收。


考查内容:JVM运行流程

题干:Java代码执行的第一步是?
A. 编译为字节码
B. 加载类到方法区
C. 解释执行指令
D. 分配堆内存
正确答案:B
解析:JVM启动后先加载类到方法区(如类信息、常量池),再执行字节码。


考查内容:数据区域

题干:以下哪项是线程共享的?
A. 虚拟机栈
B. 本地方法栈
C. 堆
D. 程序计数器
正确答案:C
解析:堆是全局共享的,虚拟机栈、本地方法栈和程序计数器均为线程私有。


考查内容:垃圾回收算法

题干:G1收集器的特点不包括?
A. 基于Region分区
B. 需要完全STW
C. 支持并行压缩
D. 可预测停顿时间
正确答案:B
解析:G1通过并行化和分Region回收减少STW时间,且支持可配置的停顿时间预测。


考查内容:类加载机制

题干:以下哪项属于类初始化的触发条件?
A. 父类初始化完成
B. 主动调用静态方法
C. 创建子类对象
D. 加载类文件到内存
正确答案:B
解析:类初始化(即方法执行)由主动引用(如调用静态方法)触发,被动引用(如创建对象)不会触发。


考查内容:内存模型

题干final字段的可见性如何保证?
A. 插入内存屏障
B. 禁止指令重排序
C. 使用锁同步
D. 延迟初始化
正确答案:B
解析final字段在构造函数完成后立即可见,JMM通过禁止对其写操作的指令重排序保证可见性。


考查内容:JVM架构

题干:方法区存储的内容不包括?
A. 类元数据
B. 常量池
C. 线程状态
D. 静态变量
正确答案:C
解析:方法区存储类信息、常量池和静态变量,线程状态由虚拟机栈中的程序计数器记录。


考查内容:垃圾回收机制

题干:ZGC(Z Garbage Collector)的核心目标是?
A. 减少内存碎片
B. 支持超大堆回收
C. 实现锁free暂停
D. 优化新生代回收
正确答案:B
解析:ZGC设计目标是处理TB级堆内存,同时保持低延迟,而非仅解决碎片或锁竞争问题。


困难题(5道)

考查内容:内存模型与多线程

题干:以下关于volatilesynchronized的说法正确的是?
A. volatilesynchronized更轻量
B. synchronized能保证原子性
C. volatile可替代synchronized
D. 两者均依赖CPU锁
正确答案:A
解析volatile仅保证可见性和禁止重排序,synchronized额外提供原子性和互斥,但性能开销更大。


考查内容:类加载机制与热更新

题干:JVM中类热替换(HotSwap)的关键限制是?
A. 方法签名不可修改
B. 类加载器必须一致
C. 不能添加新的接口
D. 静态变量会被重置
正确答案:A
解析:热替换要求新类的方法签名与原类完全一致,否则会导致兼容性问题,静态变量状态需手动恢复。


考查内容:垃圾回收与内存分配

题干:TLAB(Thread-Local Allocation Buffer)的主要目的是?
A. 减少全局锁竞争
B. 提高对象访问速度
C. 避免内存碎片
D. 加速跨代对象晋升
正确答案:A
解析:TLAB为每个线程分配独立内存区域,减少多线程并发分配时的全局锁(如Eden区锁)竞争。


考查内容:JVM底层原理

题干:JVM中方法调用的栈帧不包含以下哪项?
A. 局部变量表
B. 动态链接
C. 方法出口地址
D. 对象头信息
正确答案:D
解析:栈帧包含局部变量表、操作数栈、动态链接(方法引用)和方法返回地址,对象头信息存储在堆中。


考查内容:内存模型与指令重排序

题干:假设代码为:

int a = 1;  
int b = 2;  
// 可能发生重排序  
System.out.println(a);  
System.out.println(b);  

以下哪项是合法的重排序结果?
A. 1, 2
B. 2, 1
C. 打印顺序随机
D. 仅允许a=1在前
正确答案:B
解析:在无happens-before约束的场景下,JVM可能将a=1b=2的赋值重排序为b=2先执行,导致输出2,1。


以上题目涵盖JVM核心知识点,难度分层合理,解析清晰。如需调整或补充,请随时告知!

http://www.dtcms.com/a/267575.html

相关文章:

  • C++ Qt 基础教程:信号与槽机制详解及 QPushButton 实战
  • virtualbox+vagrant私有网络宿主机无法ping通虚拟机问题请教
  • Apache 配置文件提权的实战思考
  • 数据库-元数据表
  • docker容器中Mysql数据库的备份与恢复
  • Java的AI新纪元:Embabel如何引领智能应用开发浪潮
  • 一文讲清楚React中setState的使用方法和机制
  • 应用标签思路参考
  • wsl查看磁盘文件并清理空间
  • Django跨域
  • 什么是单点登录SSO?有哪些常用的实现方式?
  • Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算
  • SpringBoot系列—入门
  • ffplay6 播放器关键技术点分析 1/2
  • NumPy-核心函数np.matmul()深入解析
  • UI前端与数字孪生融合:为智能制造提供可视化生产调度方案
  • 分享一些服务端请求伪造SSRF的笔记
  • RAL-2025 | 触觉助力无人机空中探索!基于柔顺机器人手指的无人机触觉导航
  • 快讯|美团即时零售日订单已突破1.2亿,餐饮订单占比过亿
  • 【第五章】 工程测量学
  • ASP.NET代码审计 MVC架构 SQL注入漏洞n
  • 《设计模式之禅》笔记摘录 - 4.抽象工厂模式
  • Puppeteer page.$$(selector)
  • Swift 数学计算:用 Accelerate 框架让性能“加速吃鸡”
  • go基本用法
  • CentOS虚拟机ifconfig命令不显示IP地址解决方法
  • 【无标题】JavaScript入门
  • LESS/SCSS 高效主题换肤方案
  • P1424 小鱼的航程(改进版)
  • WPF学习笔记(24)命令与ICommand