JVM面试必备知识:内存模型、GC原理与工具解析
175 浏览量
更新于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是垃圾收集,用于自动释放不再使用的内存,防止内存泄漏,提高内存利用率。
615 浏览量
1604 浏览量
304 浏览量
193 浏览量
146 浏览量
159 浏览量
167 浏览量
221 浏览量
251 浏览量
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
weixin_38571603
- 粉丝: 3
最新资源
- MATLAB 2006神经网络工具箱用户指南
- INFORMIX监控与管理命令详解:SMI与TBSTAT操作
- Intel Threading Building Blocks:引领C++并行编程新时代
- C++泛型编程深入指南:模板完全解析
- 精通组件编程:COM/DCOM实例解析与Office二次开发
- UNIX基础入门:常用命令详解与操作
- Servlet基础入门:生命周期与配置详解
- HTTP状态码详解:成功、重定向与信息响应
- Java Web Services:构建与集成指南
- LDAP技术详解:从X.500到ActiveDirectory
- MyEclipse开发JSF实战教程:快速入门
- 刘长炯MyEclipse 6.0入门教程:快速安装与开发指南
- Linux环境下安装配置Tomcat指南
- Eclipse与Lomboz插件助力J2EE开发:从WebSphere到WebLogic
- Oracle数据库操作:自定义函数与记录处理
- 谭浩强C语言基础:数据类型、运算符与表达式解析