先了解为什么样的垃圾会被回收,哪里的垃圾
- 回收的是堆内垃圾,
- 当对象没有任何引用指向,那就是垃圾,就有可能被回收回去
怎么定位是可需要被回收的垃圾
- 引用计数法:当对象被引用一次那就增加一个一个引用次数,如果未被引用过,则引用次数为0,不过可能会存在循环引用,出现内存泄露的问题
- 可达性计数法:是一种默认的分析算法,利用GC Root,沿着GC ROOT为起点开始关联对象,未找到的就算是可回收的
可作为GC root的对有虚拟机栈中的引用对象、方法区中类静态属性引用的对象、方法区中常量引用对象、本地方法栈中的native方法引用的对象
垃圾回收算法
1.标记清除算法 (分为标记和清除)
1.对根据可达性分析算法分析出的垃圾进行标记
2.对标记的垃圾进行回收
优点:清除速度快
缺点:内存碎片化严重
2.复制算法
内存分为两块空间,标记垃圾后将可用存活复制到另外一块内存区域
优点:在垃圾对象较多的情况下速度较快、清理后无内存碎片
缺点:内存使用户率低
3.标记整理算法
与标记清除算法比,不同点在于整理存活对象至一段,完城后才会进行清理垃圾,可以避免内存碎片问题,性能也较低,很多老年代都会使用这个算法
JVM中的分代回收:
minorGC:指的是发生在新生代的垃圾回收,会有短暂的STW
MixGC:新生代和老年代部分区域的垃圾回收,使用的G1收集齐
full GC:新生代+老年代的全部区域的垃圾回收,暂停时间长
标签:标记,内存,回收,算法,引用,JVM,法及,垃圾 From: https://blog.51cto.com/u_15702726/8519228