深入理解JVM:面试必备的5大核心知识点解析
需积分: 0 125 浏览量
更新于2024-06-23
收藏 29KB DOCX 举报
"JVM 50 道面试题及答案涵盖了JVM内存管理、对象分配、常量池、动态年龄判断、永久代、运行时内存区域、栈帧结构以及内存模型和垃圾回收等内容。"
1. **对象分配**:
- 对象和数组主要在堆内存中分配,但如果是局部变量且没有逃逸到方法外部,可能被优化存储在栈上。
2. **JVM常量池**:
- JDK 1.8以后,字符串常量池位于堆中,包括通过`intern()`方法和双引号创建的字符串。
- 运行时常量池存储在方法区(元空间),包含了类加载后的常量信息。
- 类文件常量池是JVM概念,存在于类文件中,包含类的各种元数据。
3. **动态年龄判断**:
- `-XX:TargetSurvivorRatio`参数用于设置Survivor区的目标使用率,默认为50%。
- 当Survivor区中相同年龄对象的总大小达到Survivor区的50%目标使用率时,这些对象会直接晋升到老年代。
- `-XX:MaxTenuringThreshold`设置对象晋升老年代的最大年龄阈值。
4. **永久代与元空间**:
- 在JDK 8之前,Hotspot JVM的方法区是永久代(PermGen)。
- 从JDK 7开始,字符串常量池和静态变量移到堆,JDK 8彻底移除永久代,引入元空间,元空间在本地内存中分配。
5. **JVM运行时内存区域**:
- 程序计数器:记录当前线程执行的指令地址。
- 虚拟机栈:每个方法对应一个栈帧,存储局部变量、操作数栈、动态链接等。
- 堆:存储所有对象实例和数组。
- 方法区(元空间):存储类的元数据,如运行时常量池。
- 运行时常量池:存储类的常量和符号引用。
- 本地方法栈:支持Java方法调用的非Java代码(如C/C++ native方法)。
6. **运行时栈帧结构**:
- 局部变量表:存储方法的局部变量。
- 操作数栈:执行计算操作的栈。
- 动态连接:存放方法的常量池引用。
- 返回地址:标识方法返回的位置。
- 附加信息:其他辅助信息,如异常处理器表。
7. **JVM内存模型**:
- 工作内存和主内存两部分,线程间通信通过主内存。
- 工作内存是线程私有,包含栈和局部变量表。
- 主内存是共享的,包含堆和方法区。
8. **垃圾对象判定**:
- JVM使用可达性分析算法,通过GC Roots来确定对象是否可达。
- 如果对象无法从GC Roots直接或间接引用,会被标记为垃圾,准备回收。
以上是JVM面试题中的核心知识点,涉及了JVM内存管理的多个方面,理解和掌握这些知识对于优化Java应用程序性能至关重要。
2023-07-07 上传
2023-07-07 上传
2023-07-09 上传
2023-07-08 上传
2024-10-16 上传
2024-10-16 上传
2024-10-16 上传
苹果牛顿吃
- 粉丝: 22
- 资源: 2790
最新资源
- WPF渲染层字符绘制原理探究及源代码解析
- 海康精简版监控软件:iVMS4200Lite版发布
- 自动化脚本在lspci-TV的应用介绍
- Chrome 81版本稳定版及匹配的chromedriver下载
- 深入解析Python推荐引擎与自然语言处理
- MATLAB数学建模算法程序包及案例数据
- Springboot人力资源管理系统:设计与功能
- STM32F4系列微控制器开发全面参考指南
- Python实现人脸识别的机器学习流程
- 基于STM32F103C8T6的HLW8032电量采集与解析方案
- Node.js高效MySQL驱动程序:mysqljs/mysql特性和配置
- 基于Python和大数据技术的电影推荐系统设计与实现
- 为ripro主题添加Live2D看板娘的后端资源教程
- 2022版PowerToys Everything插件升级,稳定运行无报错
- Map简易斗地主游戏实现方法介绍
- SJTU ICS Lab6 实验报告解析