堆内存划分为 Eden、Survivor 和 Tenured/Old 空间
Minor GC 和 Major GC
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。需要注意的是:
- 当 JVM 无法为一个新的对象分配空间时会触发 Minor GC,比如当 Eden 区满了。所以分配率越高,越频繁执行 Minor GC。
- Eden 和 Survivor 区进行了标记和复制操作, Eden 和 Survivor 区不存在内存碎片。
- 执行 Minor GC 操作时,不会影响到永久代。
- 所有的 Minor GC 都会导致应用程序的线程的暂停。
Major GC 是清理永久代。需要注意的是许多 Major GC 是由 Minor GC 触发的,所以很多情况下将这两种 GC 分离是不太可能的。
Full GC
Full GC 是清理整个堆空间—包括年轻代和永久代。