JVM面试必备知识:内存模型、GC原理与工具解析

3 下载量 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是垃圾收集,用于自动释放不再使用的内存,防止内存泄漏,提高内存利用率。