Java面试必备:JVM内存与垃圾回收深度解析

3星 · 超过75%的资源 需积分: 15 3 下载量 92 浏览量 更新于2024-07-01 收藏 13.3MB PDF 举报
"这份PDF文件是关于JAVA面试的核心知识点整理,包含了JVM的详细解析,如线程、内存区域、垃圾回收机制等,以及各种垃圾回收算法和引用类型的介绍,还涉及了不同的垃圾收集器。" Java面试核心知识点主要包括以下几个方面: 1. **JVM**: JVM(Java Virtual Machine)是Java程序的运行环境,它负责解释执行字节码并管理程序的内存。JVM内存区域包括: - **程序计数器**:每个线程都有自己的程序计数器,用于存储当前线程执行的字节码指令地址。 - **虚拟机栈**:每个线程都有一个虚拟机栈,用于存储局部变量、表达式计算结果等。 - **本地方法区**:为JVM调用Native方法提供支持,每个线程都有自己的本地方法区。 - **堆**:所有对象实例都在堆中分配内存,是线程共享的区域。 - **方法区/永久代**:存储类信息、常量、静态变量等,Java 8后被元空间(Metaspace)取代。 2. **JVM运行时内存**: - **新生代**:对象首先在Eden区创建,经历几次Minor GC后存活的对象会被转移到Survivor区,经过多次Survivor区间的转移,满足条件的对象进入老年代。 - **新生代的Minor GC过程**:通过复制算法进行垃圾回收,包括Eden区和一个Survivor区的复制,然后清空未被复制的对象所在的区域,最后交换两个Survivor区的角色。 - **老年代**:存放长期存活的对象,适用于标记整理算法。 - **永久代/元空间**:存储类的信息,Java 8以后元空间替代了永久代,以减少Full GC的发生。 3. **垃圾回收与算法**: - **如何确定垃圾**:通过引用计数法或可达性分析来判断对象是否可达,从而确定是否为垃圾。 - **垃圾回收算法**:包括标记清除、复制、标记整理和分代收集等,每种算法都有其优缺点和适用场景。 4. **JAVA四种引用类型**: - **强引用**:默认的所有引用都是强引用,不可被垃圾回收。 - **软引用**:当内存不足时,会回收软引用的对象。 - **弱引用**:只要进行垃圾回收,无论内存是否充足,都会回收弱引用对象。 - **虚引用**:无法直接获取虚引用对象,主要用于跟踪对象被垃圾回收的状态。 5. **GC分代收集算法与分区收集算法**: - **分代收集算法**:根据对象的生命周期将内存分为新生代和老年代,采用不同的垃圾回收策略。 - **分区收集算法**:将堆空间划分为多个小分区,每个分区独立进行垃圾回收,以减少全堆扫描的时间。 6. **GC垃圾收集器**: - **Serial收集器**:单线程的垃圾收集器,适用于客户端应用。 - **ParNew收集器**:Serial收集器的多线程版本,常与CMS收集器配合使用。 - **ParallelScavenge收集器**:优化了吞吐量的多线程复制算法收集器。 - **SerialOld收集器**:单线程的老年代垃圾收集器,常作为CMS收集器的备用方案。 这些知识点是Java开发者面试中常见的问题,理解和掌握它们对于提升面试成功率和实际开发能力非常重要。