JVM垃圾回收机制
标记垃圾
引用计数法:
如果对象有引用,则对象的引用数+1,引用结束,引用数-1,引用数为0的就是垃圾。
缺点:会存在循环引用的问题。
用途:分布式垃圾回收会使用引用计数
可达性分析:
从根节点不可以到达的对象都是垃圾
垃圾回收算法
标记清除算法:
将标记成垃圾的对象直接清除
缺点:会导致内存空间不连续,使用率低
复制算法
将内存区域分成等分的两部分,每次使用一部分,当发生垃圾回收的时候,将存活的对象复制到内存的另一半,然后清空之前使用的,使用另一半内存。
缺点:内存每次只能使用一半,使用率太低
标记整理算法
垃圾回收的时候,将存活的对象复制到内存的另一端,清空刚刚使用的一端
内存分配机制
指针碰撞
直接分配内存,效率高;
只有内存空间连续才能使用指针碰撞分配内存,要求垃圾回收算法是复制算法或者标记清除算法;
空闲列表
维护一个空闲空间的列表来分配内存,相对而言效率低
引起GC的原因
minor GC
- eden内存空间已满
full GC
- 当发生minor GC的时候,如果老年代的剩余内存空间小于青年代GC后已用的内存空间
- 老年代内存已满
- 元空间已满,元空间的垃圾回收很苛刻,发生垃圾回收后回收的空间很有限