JVM垃圾回收机制 - GC发生在JVM哪部分,有几种GC,它们的算法是什么?
GC发生在heap堆中。
1.1 Minor GC
从年轻代空间(包括Eden和Survivor区域)回收内存被称为Minor GC :
- 当Eden区域满了,jvm无法为新对象分配内存,会触发Minor GC;
- 新生代好进行标记和复制操作,就不会存在内存碎片。
- 年轻代中指向永久代中的引用,在标记阶段就会忽略。
- stop-the-world。原因是Eden区中对象认为是垃圾,不会复制到Survivor区或者老年代。如果相反,Eden区
大部分对象不符合GC 条件,那么 Minor GC指定的时间就比较长。每次Minor GC会清理年轻代的内存。
1.2 Major GC 和Full GC
- Major GC: 清理老年代
- Full GC: 清理整个堆内存,包括年轻代和老年代
但是更多情况下,许多Minor GC 会 触发Major GC ,所以实际情况两者分离是不可能的。这就使得我们关注重点变成,GC是否能并发处理这些GC.
GC的四大算法:
1.引用回收算法(对象有引用,就不回收,已淘汰,无法处理循环引用)
2.复制算法(发生在YG、效率高,无碎片,占空间)
3.标记清除(发生在OG、省空间,产生碎片)
4.标记压缩(OG、成本高)
5.标记清除压缩(OG、③④混合)
7FBC5EDCA8C08E752CDCD50D95BD85BF.png
网友评论