JVM的GC主要有以下几种:
- Minor GC
- Major GC
- Full GC
1.MinorGC
年轻代是所有新对象产生的地方,当年轻代内存空间不够用时就会触发MinorGC.
年轻代区域的内存特点:
年轻代的内存分为:Eden:From survivor:To survivor = 8:1:1
大多数新建的对象都在Eden区,当Eden区被占满时就会触发MinorGc,把存活下来的对象转移到To survivor,将From survivor清空,这样再一段时间内总会有一个survivor区是空闲的.
经过多次GC后,仍然存活下来的对象会被转移到老年代空间
2.Major GC
老年代的垃圾回收叫Major GC,Major GC通常跟Full GC是等价的,收集整个堆.
3.Full GC
Full GC是针对整个新生代,老年代,元空间(永久代)的全局范围GC.
Tip: 当FullGC连续三次回收内存不超过2%,会抛出内存泄露异常,比如web系统导出大文件可能会触发此情景