Java内存模型与垃圾回收

下载需积分: 9 | PDF格式 | 487KB | 更新于2024-07-09 | 63 浏览量 | 1 下载量 举报
收藏
"这是一份关于Java面试的笔记,涵盖了美团和蚂蚁金服可能考察的Java相关技术点,包括Java内存模型、线程、垃圾回收和各种垃圾收集器的介绍。" 在这份Java面试笔记中,主要讨论了以下几个关键知识点: 1. **Java内存模型**: Java内存模型(JMM)规定了线程如何访问和共享内存中的数据。它包括了堆、方法区、虚拟机栈、本地方法栈和程序计数器。其中,方法区(也称为永久代)存储类信息,如字段、方法和常量池。堆是所有线程共享的内存区域,用于对象实例的分配。如果方法区或堆空间不足,会导致内存溢出。 2. **堆内存管理**: - **新生代与老年代**:Java对象首先在Eden区分配,经历多次Minor GC后仍存活的则进入Survivor区,并通过年龄阈值(默认15)判断是否进入老年代。 - **空间分配担保机制**:在大量对象创建时,如果Eden区不足以容纳,会检查老年代是否有足够的空间直接分配,如果没有,则触发Full GC。 - **大对象直接进入老年代**:避免频繁的内存复制操作。 - **对象晋升策略**:当Survivor区中相同年龄的对象大小超过其一半时,年龄大于或等于这个年龄的对象可以直接晋升到老年代。 3. **虚拟机栈与本地方法栈**: - **虚拟机栈**:每个线程都有一个独立的虚拟机栈,包含局部变量表、操作数栈、动态连接和方法返回地址。局部变量表存储方法参数和局部变量。 - **本地方法栈**:为JNI(Java Native Interface)方法服务,处理Native方法调用。 4. **可达性分析算法**: 用于判断对象是否存活,主要关注方法区的类静态属性引用、常量引用、虚拟机栈的本地变量表引用以及本地方法栈JNI引用的对象。 5. **垃圾回收算法**: - **引用计数**:简单但无法处理循环引用。 - **复制算法**:用于新生代,效率高但浪费空间。 - **标记清除算法**:会产生内存碎片。 - **标记整理算法**:无碎片但效率较低。 6. **垃圾收集器**: - **Serial**:单线程,新生代和老年代都采用串行收集。 - **ParNew**:新生代的并行收集器,常与CMS配合。 - **CMS (Concurrent Mark Sweep)**:并发标记清除,减少STW时间。 - **G1 (Garbage-First)**:新一代的垃圾收集器,目标是实现可预测的停顿时间。 这些知识点是Java面试中常见的问题,对于理解和优化Java应用程序的性能至关重要。在面试过程中,了解这些概念并能结合实际应用进行讨论,将有助于展示你的专业技能和深入理解。

相关推荐