问答题【177/1053】谈谈你对垃圾回收的了解,什么时候发生垃圾回收,回收过程
垃圾回收(Garbage Collection)详解
1. 垃圾回收的作用
- 自动管理内存,释放不再使用的对象空间,避免内存泄漏和内存溢出问题。
2. 垃圾回收的触发时机
- 内存不足:堆内存不足时自动触发。
- 显式调用:通过
System.gc()
或Runtime.getRuntime().gc()
请求。
- JVM自动判断:根据垃圾回收器的策略,在合适的时机执行。
3. 如何判断对象是否可回收
-
可达性分析算法:
- 判断对象是否可通过GC Roots直接或间接访问。
- 不可达的对象即被认为是“垃圾”,可以回收。
-
GC Roots包括:
4. 垃圾回收的过程
- 标记:
- 清除:
- 压缩(可选):
5. JVM分代垃圾回收机制
- 新生代:
- 包括Eden区和两个Survivor区,短生命周期对象回收频繁。
- 使用“复制算法”,回收速度快。
- 老年代:
- 存放生命周期较长的对象,GC频率较低。
- 使用“标记-清除”或“标记-整理”算法。
- 元空间:
- 存放类元数据(Java 8后取代永久代),使用本地内存。
6. 常见垃圾回收器
Serial GC
Parallel GC
CMS GC
G1 GC
7. 垃圾回收对性能的影响
- 停顿时间:Stop-The-World(STW)会暂停应用线程。
- GC频率:过于频繁的GC会降低系统性能。
- 内存碎片:某些GC(如CMS)可能会导致碎片问题。
8. 优化垃圾回收的方式
- 调整JVM参数:
- 如
-Xms
(初始堆大小)、-Xmx
(最大堆大小)、-XX:+UseG1GC
(使用G1 GC)。
- 分析GC日志,选择合适的垃圾回收器和配置。
最近更新时间:2024-12-02