Java八股之GC 垃圾回收机制和OOM

张开发
2026/4/19 5:21:40 15 分钟阅读

分享文章

Java八股之GC 垃圾回收机制和OOM
1. JVM 的 GC 垃圾回收机制JVM 的垃圾回收Garbage Collection机制是自动管理内存的一种机制它可以识别和回收不再使用的对象释放其占用的内存空间。以下是垃圾回收机制的介绍以及一些常见的垃圾回收算法1. 垃圾回收机制介绍垃圾回收器负责自动检测和回收不再使用的对象。它通过标记 - 清除、复制、标记 - 整理等算法来回收垃圾对象。垃圾回收过程包括标记、清除、整理和压缩等阶段。2. 常见的垃圾回收算法标记 - 清除算法Mark and Sweep首先标记出所有活动对象然后清除未标记的对象。复制算法Copying将可用内存分为两块每次只使用其中一块将存活对象复制到另一块中然后清除当前使用的块。标记 - 整理算法Mark and Compact标记出所有活动对象然后将活动对象向一端移动之后清理边界外的内存。分代收集算法Generational Collection将堆内存分为新生代和老年代并使用不同的回收算法。新生代通常使用复制算法老年代使用标记 - 清除或标记 - 整理算法。3. 默认的垃圾回收算法默认情况下HotSpot JVM 使用分代收集算法。新生代使用复制算法其中的 Eden 区和 Survivor 区各占一部分并且采用了对象晋升机制。老年代使用标记 - 清除或标记 - 整理算法来回收内存。最简回答GC 垃圾回收机制是指 Java 虚拟机自动管理内存的机制通过自动识别和回收不再使用的对象释放对应的内存资源以避免内存泄漏和提高程序性能。2. 项目是否出现过 OOM 问题怎么排查的可能原因如何复现一个内存溢出场景内存溢出和内存泄露的区别 [新]项目中的内存溢出出现过是比较常见的问题。如何排查OOM问题对于 OOM 问题的排查可以采取以下步骤检查日志文件查看错误日志或异常信息定位到具体的异常堆栈信息。使用内存分析工具如 Java 的 jmap、jstack、VisualVM 等工具分析内存快照以定位内存泄漏。进行代码审查检查可能引起内存泄漏的代码如长时间持有对象、未关闭资源等。增加日志和监控使用合适的日志和监控工具记录系统的内存使用情况及峰值。可能的原因对象过多创建了大量对象并占用了大量内存。内存泄漏某些对象被错误地保持引用使得其无法被垃圾回收器回收。不合理的内存设置如分配给应用程序的内存不足导致 OOM。如何复现一个内存溢出场景复现内存溢出的场景可以通过以下方法增加测试数据量模拟大量数据的输入使得应用程序需要占用更多的内存。重复执行某些操作如循环读取文件或者对对象进行不断修改等。设置小的堆大小通过设置较小的堆大小可以更容易地触发 OOM 异常。内存溢出和内存泄露的区别内存溢出指应用程序在申请内存时无法获得足够的内存空间造成异常终止。常见原因是使用了过多的对象并且没有妥善释放。内存泄漏指应用程序中存在无用的对象占用内存并且这些对象无法被垃圾回收器回收。随着时间的推移内存资源逐渐耗尽最终导致内存溢出。

更多文章