- 轻GC和重GC分别在什么时候发生
如果新对象在创建时,因为新生区内存已满而无法创建时,这时就会发生一次轻GC,把新生区和幸存0区中的存活对象移到幸存1区,并将其他对象清除。故 轻GC实在新生区快满时发生。
重GC主要发生在老年区。轻GC过后,若新生区和其中一个幸存区仍无法存放新对象,这时就尝试把对象移到老年区,若老年区也无法存放,这时就会触发重GC。重GC过后若能存放新对象,则创建成功,若失败,则出现OOM错误。
(常见的OOM错误有三种:
java.lang.OutOfMemoryError: Java heap space——堆内存溢出
java.lang.OutOfMemoryError: PermGen space——元空间溢出
java.lang.StackOverflowError——栈溢出,一般是由于死循环或递归引起
这些可以通过JVM调优进行改进。)