JVM面试必备知识:内存模型、GC原理与工具解析
115 浏览量
更新于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是垃圾收集,用于自动释放不再使用的内存,防止内存泄漏,提高内存利用率。
623 浏览量
1614 浏览量
306 浏览量
715 浏览量
143 浏览量
789 浏览量
460 浏览量
105 浏览量
252 浏览量

weixin_38571603
- 粉丝: 3
最新资源
- Android PRDownloader库:支持文件下载暂停与恢复功能
- Xilinx FPGA开发实战教程(第2版)精解指南
- Aprilstore常用工具库的Java实现概述
- STM32定时开关模块DXP及完整项目资源下载指南
- 掌握IHS与PCA加权图像融合技术的Matlab实现
- JSP+MySQL+Tomcat打造简易BBS论坛及配置教程
- Volley网络通信库在Android上的实践应用
- 轻松清除或修改Windows系统登陆密码工具介绍
- Samba 4 2级免费教程:Ubuntu与Windows整合
- LeakCanary库使用演示:Android内存泄漏检测
- .Net设计要点解析与日常积累分享
- STM32 LED循环左移项目源代码与使用指南
- 中文版Windows Server服务卸载工具使用攻略
- Android应用网络状态监听与质量评估技术
- 多功能单片机电子定时器设计与实现
- Ubuntu Docker镜像整合XRDP和MATE桌面环境