JVM面试必备知识:内存模型、GC原理与工具解析
170 浏览量
更新于2024-08-29
收藏 290KB PDF 举报
"本文主要涵盖了JVM相关的面试知识点,包括内存模型、堆内存分区、对象创建与访问、垃圾收集机制、内存调试工具、类加载过程、内存分配与回收策略等核心概念。"
1. **内存模型及分区**
JVM内存模型主要包括堆、栈、方法区(在Java 8后被元空间取代,但传统方法区的概念仍然适用)。堆用于存储对象实例和数组,栈存储方法调用中的局部变量,方法区则存储类信息、常量池、字节码等。
2. **堆内存分区**
- Eden:大多数新生对象首先被分配到此区域。
- Survivor:包括From区和To区,用于在对象晋升至老年代前进行筛选,避免频繁的Minor GC。
- 老年代:存放长期存活的对象,当Eden和Survivor区无法容纳新对象时,经过多次Minor GC仍存活的对象会被移动至此。
3. **对象创建与访问**
对象在堆中创建,其引用在栈上分配。访问定位通常通过句柄或直接指针实现,具体取决于JVM实现。
4. **GC的两种判定方法**
- 引用计数法:对象被引用的次数,但存在循环引用问题。
- 可达性分析法:通过一系列根对象(如栈上的引用、全局静态变量等)来判断对象是否可达,是现代JVM普遍采用的方法。
5. **SafePoint**
SafePoint是在程序执行过程中,线程可以安全地暂停执行的地方,主要用于垃圾收集时暂停线程。
6. **GC的三种收集方法**
- Mark-Sweep(标记-清除):标记无用对象并清除,可能导致内存碎片。
- Copying(复制):将存活对象复制到一块连续内存,解决了碎片问题,但效率较低。
- Mark-Compact(标记-整理):标记后将存活对象紧凑到一端,清除另一端,适用于老年代。
7. **GC收集器**
- CMS(Concurrent Mark Sweep):并发标记清除,适合响应时间要求高的系统,可能导致内存碎片。
- G1(Garbage-First):新一代的垃圾收集器,目标是整体停顿时间可预测,使用混合收集策略。
8. **Minor GC与Full GC**
- Minor GC:针对年轻代(包括Eden和Survivor区)的垃圾收集。
- Full GC:清理整个堆和方法区,通常发生在老年代内存不足或System.gc()被显式调用时。
9. **内存调试工具**
- jmap:用于查看堆内存和对象信息。
- jstack:打印线程堆栈信息,帮助诊断死锁等问题。
- jconsole:图形界面监控JVM运行状态。
- jhat:分析堆转储文件,查找内存泄漏。
10. **类加载过程**
包括加载、验证、准备、解析和初始化五个阶段。
11. **JVM内存分区**
- 栈:存储方法调用信息。
- 堆:存储对象实例。
- 方法区/元空间:存储类信息、常量池等。
- 本地方法栈:为JNI调用的原生方法服务。
12. **对象存活判断**
主要是通过可达性分析法进行判断。
13. **Java垃圾回收机制**
自动回收不再使用的对象所占用的内存,以避免内存泄漏。
14. **垃圾收集方法**
包括上述的Mark-Sweep、Copying、Mark-Compact等。
15. **Java内存模型**
描述了线程之间如何共享和访问内存,确保正确性。
16. **类加载过程**
类加载过程包括加载、验证、准备、解析和初始化。
17. **类加载机制**
涉及到类加载器,确保类的唯一性和有序加载。
18. **类加载器双亲委派模型**
类加载请求先向上委托给父类加载器,只有父类加载失败才会尝试自己加载,保证了类的唯一性。
19. **类加载器**
类加载器有Bootstrap ClassLoader、Extension ClassLoader、Application ClassLoader,以及用户自定义类加载器。
20. **内存分配与回收策略**
主要涉及对象在堆中的分配,以及 Minor GC 和 Major GC(Full GC)的执行时机。
21. **JVM线程与原生线程**
JVM线程是基于操作系统原生线程的抽象,两者之间存在一对一的关系。
22. **Java内存管理机制**
包括堆内存管理、栈内存管理、垃圾回收机制等,以及对应的性能优化工具。
23. **加载Class文件的原理机制**
通过类加载器读取.class文件,转换成运行时的数据结构。
24. **JVM原理**
JVM是Java应用程序的运行环境,包括内存管理、类加载、字节码解释执行、垃圾回收等核心功能。
25. **GC线程是否为守护线程**
默认情况下,GC线程是守护线程,确保当所有非守护线程结束后,JVM能够自动退出。
26. **类加载器类型与双亲委派模型**
类加载器包括Bootstrap、Extension和Application,双亲委派模型确保类的唯一性,防止类的重复加载。
27. **垃圾回收器基本原理**
垃圾回收器通过跟踪和标记未使用的对象,然后回收其占用的内存。
28. **什么是GC,为何需要GC**
GC是垃圾收集,用于自动释放不再使用的内存,防止内存泄漏,提高内存利用率。
2019-08-22 上传
2019-07-05 上传
2020-12-22 上传
2022-06-01 上传
2024-03-13 上传
2019-05-29 上传
2019-08-02 上传
2023-06-14 上传
2022-04-09 上传
weixin_38571603
- 粉丝: 3
- 资源: 926
最新资源
- BottleJS快速入门:演示JavaScript依赖注入优势
- vConsole插件使用教程:输出与复制日志文件
- Node.js v12.7.0版本发布 - 适合高性能Web服务器与网络应用
- Android中实现图片的双指和双击缩放功能
- Anum Pinki英语至乌尔都语开源词典:23000词汇会话
- 三菱电机SLIMDIP智能功率模块在变频洗衣机的应用分析
- 用JavaScript实现的剪刀石头布游戏指南
- Node.js v12.22.1版发布 - 跨平台JavaScript环境新选择
- Infix修复发布:探索新的中缀处理方式
- 罕见疾病酶替代疗法药物非临床研究指导原则报告
- Node.js v10.20.0 版本发布,性能卓越的服务器端JavaScript
- hap-java-client:Java实现的HAP客户端库解析
- Shreyas Satish的GitHub博客自动化静态站点技术解析
- vtomole个人博客网站建设与维护经验分享
- MEAN.JS全栈解决方案:打造MongoDB、Express、AngularJS和Node.js应用
- 东南大学网络空间安全学院复试代码解析