JVM面试必备:核心概念解析与面试题集锦
需积分: 0 159 浏览量
更新于2024-08-03
收藏 29KB DOCX 举报
"JVM 45 道面试题及答案.docx"
在Java虚拟机(JVM)中,栈帧是线程执行方法时创建的结构,它包含了以下几个关键部分:
1. 局部变量表:存储方法的局部变量,包括方法参数和局部变量。每个变量都有一个槽位,用来存放基本数据类型或对象引用。
2. 操作数栈:也称为操作栈,执行计算操作的地方。当执行方法时,指令会将操作数压入栈,然后进行运算,最后将结果弹出。
3. 动态连接:用于存储调用方法的信息,如常量池的引用,便于动态解析。
4. 返回地址:当方法执行完毕时,控制权会返回到调用者,返回地址记录了接下来要执行的字节码指令的位置。
程序计数器(PC寄存器)是每个线程私有的,其主要作用是记录当前线程执行的字节码的行号。它在多线程环境下确保了每个线程能正确地执行自己的代码流,而不是互相干扰。
字符串常量在JVM中的存储位置有所变化。在JDK 8之前,字符串常量池位于永久代(Perm Generation),但自JDK 8起,字符串常量池被移到了堆中。类文件常量池则位于方法区(在JDK 8之后被称为元空间),存储类和接口的元数据。
垃圾收集是JVM自动管理内存的过程。常见的垃圾收集算法包括:
1. 标记清除:标记所有活动对象,然后清除未标记的对象,导致碎片问题。
2. 复制算法:将内存分为两块,每次只使用一块,当一块满时,将存活对象复制到另一块,然后清空已使用的块,避免碎片,但浪费了一半的空间。
3. 标记整理:标记活动对象,然后让所有存活对象向一端移动,清理另一端,解决了碎片问题,但效率较低。
4. 分代收集:根据对象的生命周期将内存分为新生代和老年代,分别采用不同的算法,如新生代使用复制算法,老年代使用标记清除或标记整理。
在Java中,引用类型分为四种:
1. 强引用:最常见的引用类型,只要强引用存在,对象就不会被垃圾收集。
2. 软引用:当内存充足时,软引用对象不会被回收,只有在内存不足时才会回收,用于实现缓存。
3. 弱引用:比软引用更弱,无论内存是否充足,垃圾收集器都会回收被弱引用关联的对象。
4. 虚引用:几乎不提供任何实际的引用功能,对象随时可能被回收,通常与引用队列一起使用,以便在对象被回收时得到通知。
JVM判断对象是否可回收主要通过两种方法:
1. 引用计数法:为每个对象维护一个引用计数,当计数为0时,对象被认为可回收。但这种方法不能处理对象之间的循环引用问题。
2. 可达性分析:通过从一组称为GC Roots的根对象出发,遍历所有可达的对象,不可达的对象被视为可回收。这是现代JVM普遍采用的方法,能够有效处理循环引用。
2023-06-15 上传
2023-07-09 上传
2023-07-08 上传
2023-07-07 上传
2023-07-07 上传
2024-11-27 上传
2024-11-27 上传
2024-11-27 上传
2024-11-27 上传
红红火火a
- 粉丝: 22
- 资源: 1813
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南