当前位置: 首页 > 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.lryc.cn/news/581244.html

相关文章:

  • Python之--基本知识
  • App爬虫实战篇-以华为真机手机爬取集换社的app为例
  • 11_架构演进:从单体到云原生的蜕变
  • 【Docker基础】Docker数据卷管理:docker volume prune及其参数详解
  • Apache 配置文件提权的实战思考
  • Feign调用报“请求方法POST不支持“错误
  • 在sf=0.1时测试fireducks、duckdb、polars的tpch
  • 《设计模式之禅》笔记摘录 - 4.抽象工厂模式
  • pagecache过多导致oom的排查记录
  • 单用户模式、紧急模式、救援模式有什么区别
  • LeetCode 第89题:格雷编码
  • PostgreSQL表操作
  • 深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
  • python缓存装饰器实现方案
  • python中执行前置操作,后置操作的几种方法
  • 【QT】事件(鼠标、按键、定时器、窗口)
  • JVM的位置和JVM的结构体系
  • Java创建型模式---工厂模式
  • PVE DDNS IPV6
  • 基于Elasticsearch的短视频平台个性化推荐系统设计与实现
  • SwiftUI 7(iOS 26)中玻璃化工具栏的艺术
  • 介绍electron
  • 基于spark的奥运会奖牌变化数据分析
  • 国产 OFD 标准公文软件数科 OFD 阅读器:OFD/PDF 双格式支持,公务办公必备
  • day44打卡
  • cmd 的sftp传输;Conda出现环境问题: error: invalid value for --gpu-architecture (-arch)
  • 浅度解读-(未完成版)浅层神经网络-多个隐层神经元
  • 前端-CSS-day1
  • 【openp2p】学习3:【专利分析】一种基于混合网络的自适应切换方法、装 置、设备及介质
  • WSL命令